在STL中,迭代器类似于指针的作用,但是又不仅仅局限于指针。它可以用来指向类或者其他数据类型。
默认情况下,迭代器的空间分配是先分配一个,当vector的空间不够,则空间加倍,即空间的大小随着加入元素的增多,依次为0,1,2,4,8,16,...
如果使用vector.reserve进行空间大小的设定时,如果空间初始设定值为N,当元素数目大于N时,空间大小也将翻倍变为2N。
自己尝试编写一个vector的例子,帮助理解其空间分配的概念
#include<iostream>
using namespace std;
template <typename T>
struct TContainer
{
virtual void push(const T&)=0;
virtual void pop() = 0;
virtual const T& begin() = 0;
virtual const T& end() = 0;
virtual size_t size() = 0;
};
template <typename T>
struct TVector:public TContainer<T>
{
static const size_t _step = 10;
TVector()
{
_size = 0;
_cap = _step;
buf = 0;
re_capacity(_cap);
}
~TVector()
{
free(buf);
}
void re_capacity(size_t s)
{
if(!buf)
buf = (T*)malloc(sizeof(T)*s);
else
buf = (T*)realloc(buf,sizeof(T)*s);
}
void push(const T& t)
{
if(_size >= _cap)
re_capacity(_cap +=_step);
buf[_size++] = t;
}
void