STL有现成的,为什么要重新制造呢?为了锻炼自己,看看自己对底层了解到什么程度。话说前头,我可没有去研究过STL的源码,本人实力有限,看那玩意儿太恶心。vector——数组,我最熟悉的容器,在我看来是最容易实现的,所以从它开始。
vec类的声明
template<class type>
class vec
{
public:
vec();//默认构造函数
vec(unsigned int size,const type& data);//初始化构造函数
vec(const vec& copy);//拷贝构造函数
virtual ~vec();//析构函数
public:
unsigned int size();//返回vec的元素数量
void push_back(const type& data);//从vec最后面插入一个新元素
void pop_back();//将vec最后一个元素删除 并且释放掉它的内存空间
type& operator[](unsigned int i);//重载[] 然后可以用下标操作vec
public:
typedef type* iter;//迭代器
iter begin()//返回指向首元素的迭代器
{
it=_begin;
return it;
}
iter end()//返回指向末尾元素的迭代器
{
it=_begin+_size;
return it;
}
iter operator++()//重载++符号 用于操作迭代器
{
it=it+1;
}
private:
type* _begin;//vec的首地址
unsigned int _size;//数组元素个数
iter it;//迭代器
};
下面是各个接口的实现,顺便提一下为什么很多函数的形参用的是const修饰加变量引用。因为type可能是一个类,变量引用可以避免重新构造一个对象,浪费空间。