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] << " ";
    	}
    }
    
  • 相关阅读:
    【刷题】BZOJ 1036 [ZJOI2008]树的统计Count
    【刷题】BZOJ 1180 [CROATIAN2009]OTOCI
    【刷题】BZOJ 1453 [Wc]Dface双面棋盘
    【刷题】BZOJ 4025 二分图
    【模考】2018.04.08 Connection
    【模考】2018.04.08 Travel
    【刷题】BZOJ 4825 [Hnoi2017]单旋
    【刷题】洛谷 P3613 睡觉困难综合征
    【刷题】BZOJ 3668 [Noi2014]起床困难综合症
    CSS3_边框 border 详解_一个 div 的阴阳图
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811940.html
Copyright © 2011-2022 走看看