zoukankan      html  css  js  c++  java
  • vector 插入实现

    #include<iostream>
    #include<vector>
    #include<map>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<set>
    #include<queue>
    #include<unordered_map>
    #include<cmath>
    using namespace std;
    template<class T>
    class CArray
    {
    	int st = 32;
    	int size, temp;
    	T* ptr;
    public:
    	CArray(int s = 0);
    	CArray(CArray<T>& a);
    	~CArray();
    	void push_back(T v);
    	void resize(int v);
    	void Resize(int v);
    	CArray<T>& operator=(const CArray<T>& a) ;
    	int length() { return max(size, temp); };
    	T& operator [](int i)
    	{
    		return ptr[i];
    	}
    };
    
    template<class T>
    CArray<T>::CArray(int s)
    {
    	resize(s);
    }
    
    template<class T>
    CArray<T>::CArray(CArray<T>& a)
    {
    	if (!a.ptr)
    	{
    		ptr = NULL;
    		size = 0;
    		return;
    	}
    	ptr = new T[a.size];
    	memcpy(ptr, a.ptr, sizeof(T) * a.size);
    	size = a.size;
    }
    
    template<class T>
    CArray<T>& CArray<T>::operator=(const CArray<T>& a)
    {
    	if (ptr == a.ptr)
    		return *this;
    	if (a.ptr == NULL)
    	{
    		if (ptr) delete[]ptr;
    		ptr = NULL;
    		size = 0;
    		return *this;
    	}
    	if (size < a.size)
    	{
    		if (ptr) delete[]ptr;
    		ptr = new T[a.size];
    	}
    	memcpy(ptr, a.ptr, sizeof(T) * a.size);
    	size = a.size;
    	return *this;
    }
    
    template<class T>
    CArray<T>::~CArray()
    {
    	if (ptr) delete[]ptr;
    }
    
    template<class T>
    void CArray<T>::resize(int v)
    {
    	if (v == 0)
    		ptr = NULL;
    	else
    	{
    		T* temptr = new T[v];
    		memcpy(temptr, ptr, sizeof(T) * size);
    		delete[]ptr;
    		ptr = temptr;
    		while (size < v)
    		{
    			ptr[size++] = 0;	
    		}
    	}
    }
    
    template<class T>
    void CArray<T>::Resize(int v)
    {
    	T* temptr = new T[v];
    	memcpy(temptr, ptr, sizeof(T) * size);
    	delete[]ptr;
    	ptr = temptr;
    }
    
    template<class T>
    void CArray<T>::push_back(T v)
    {
    	if (ptr)
    	{
    		if (size < st)
    			ptr[size++] = v;
    		else
    		{
    			st = st * 2;
    			Resize(st);
    			ptr[size++] = v;
    		}
    	}
    	else
    	{
    		ptr = new T[st];
    		ptr[size++] = v;
    	}
    }
    
    int main()
    {
    	CArray<double>a;
    	for (int i = 0; i < 64; i++)
    	{
    		a.push_back(i + 0.3);
    	}
    	CArray<int>b;
    	for (int i = 0; i < 64; i++)
    	{
    		b.push_back(i);
    	}
    	for (int i = 0; i < a.length(); i++)
    	{
    		cout << a[i] << " ";
    	}
    	cout << endl;
    	CArray<int>q(73);
    	q[1] = 3;
    	for (int i = 0; i < q.length(); i++)
    	{
    		cout << q[i] << " ";
    	}
    	cout << endl;
    	CArray<int>f;
    	f = q;
    	for (int i = 0; i < f.length(); i++)
    	{
    		cout << f[i] << " ";
    	}
    	CArray<int>e(f);
    	for (int i = 0; i < e.length(); i++)
    	{
    		cout << e[i] << " ";
    	}
    }
    
  • 相关阅读:
    (转)elasticsearch5.2.2 压测配置
    (转) Elasticsearch 5.0 安装 Search Guard 5 插件
    (转)设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)
    分布式搜索elasticsearch配置文件详解
    (转)ActiveMQ的重连机制
    (转)Linux 命令--查看物理CPU个数、核数、逻辑CPU个数
    哈佛大学凌晨4点半的景象
    (转)关于ActiveMQ的配置
    最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络
    TensorFlow的开源与Hadoop的开源
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811940.html
Copyright © 2011-2022 走看看