#include<stdio.h>
#include<Windows.h>
#define SUCCESS           			 1
#define MALLOC_ERROR				-2
#define INDEX_ERROR		 			-3
template <class T_ELE>						
class Vector							
{							
public:							
	Vector();						
	Vector(DWORD dwSize);						
	~Vector();						
public:							
	DWORD	at(DWORD dwIndex,OUT T_ELE* pEle);		//根据给定的索引得到元素
	DWORD   push_back(T_ELE Element);				//将元素存储到容器最后一个位置
	VOID	pop_back();								//删除最后一个元素
	DWORD	insert(DWORD dwIndex, T_ELE Element);	//向指定位置新增一个元素
	DWORD	capacity();								//返回在不增容的情况下,还能存储多少元素
	VOID	clear();								//清空所有元素
	BOOL	empty();								//判断Vector是否为空 返回true时为空
	VOID	erase(DWORD dwIndex);					//删除指定元素
	DWORD	size();									//返回Vector元素数量的大小
private:							
	BOOL	expand();					
private:							
	DWORD  m_dwIndex;								//下一个可用索引
	DWORD  m_dwIncrement;							//每次增容的大小
	DWORD  m_dwLen;									//当前容器的长度
	DWORD  m_dwInitSize;							//默认初始化大小
	T_ELE *m_pVector;								//容器指针
};							
template <class T_ELE>							
Vector<T_ELE>::Vector():m_dwInitSize(100),m_dwIncrement(5)							
{							
	//1.创建长度为m_dwInitSize个T_ELE对象						
	m_pVector = new T_ELE[m_dwInitSize];
	//2.将新创建的空间初始化						
	memset(m_pVector,0,m_dwInitSize*sizeof(T_ELE));
	//3.设置其他值
	m_dwIndex=0;
	m_dwLen = m_dwInitSize;
}
template <class T_ELE>							
Vector<T_ELE>::Vector(DWORD dwSize):m_dwIncrement(dwSize)							
{							
	//1.创建长度为dwSize个T_ELE对象						
	m_pVector = new T_ELE[dwSize];
	//2.将新创建的空间初始化						
	memset(m_pVector,0,dwSize*sizeof(T_ELE));
	//3.设置其他值	
	m_dwIndex=0;
	m_dwLen = dwSize;
}
	
template <class T_ELE>							
Vector<T_ELE>::~Vector()							
{							
	//释放空间 delete[]						
	delete[] m_pVector;	
	m_pVector = NULL;
}							
template <class T_ELE>							
BOOL Vector<T_ELE>::expand()							
{							
	// 1. 计算增加后的长度						
	int all = m_dwLen + m_dwIncrement;
	// 2. 申请空间						
	T_ELE* add = new T_ELE[all];
	// 3. 将数据复制到新的空间						
	memcpy(add,m_pVector,sizeof(T_ELE) * m_dwLen);
	// 4. 释放原来空间						
	delete[] m_pVector;
	// 5. 为各种属性赋值
	m_pVector = add;
	add = NULL;
	m_dwLen = all;
	return SUCCESS;
}							
template <class T_ELE>							
DWORD  Vector<T_ELE>::push_back(T_ELE Element)							
{							
	//1.判断是否需要增容,如果需要就调用增容的函数						
	if(m_dwIndex >= m_dwLen)
	{
		expand();
	}
	//2.将新的元素复制到容器的最后一个位置						
	memcpy(&m_pVector[m_dwIndex],&Element,sizeof(T_ELE));
	//3.修改属性值						
	m_dwIndex++;
	return SUCCESS;
}							
template <class T_ELE>							
DWORD  Vector<T_ELE>::insert(DWORD dwIndex, T_ELE Element)							
{							
	//1.判断索引是否在合理区间	
	if(dwIndex < 0 || dwIndex > m_dwIndex)
	{
		return INDEX_ERROR;
	}
	//2.判断是否需要增容,如果需要就调用增容的函数											
	if(m_dwIndex >= m_dwLen)
	{
		expand();
	}
	//3.将dwIndex只后的元素后移						
	memcpy(((int*)(&m_pVector[dwIndex]))+1,&m_pVector[dwIndex],sizeof(T_ELE)*(m_dwIndex-dwIndex));
	//4.将Element元素复制到dwIndex位置						
	memcpy(&m_pVector[dwIndex],&Element,sizeof(T_ELE));
	//5.修改属性值	
	dwIndex++;
}							
template <class T_ELE>							
DWORD Vector<T_ELE>::at(DWORD dwIndex,T_ELE* pEle)							
{							
	//判断索引是否在合理区间						
	if(dwIndex < 0 || dwIndex >= m_dwIndex)
	{
		return INDEX_ERROR;
	}
	//将dwIndex的值复制到pEle指定的内存						
	memcpy(pEle,&m_pVector[dwIndex],sizeof(T_ELE));
}							
//其他函数。。自己实现
int main()
{
	Vector<int>* vector0=new Vector<int>(5);
	vector0->push_back(12);
	vector0->push_back(23);
	vector0->push_back(35);
	vector0->push_back(42);
	vector0->push_back(54);
	vector0->push_back(65);
	vector0->insert(0,100);
	int a=0;
	vector0->at(2,&a);
	printf("%d\n",a);
	getchar();
}
原文:https://www.cnblogs.com/weekbo/p/11704914.html