STL中的vector,动态增长数组,支持随机访问,当开辟的连续空间不够存放(capacity=size时又插入或加入新元素),开辟新的空间(capacity是原来的两倍),将原来的拷贝至新的空间并把新添加的元素加进来。访问、修改、删除、添加是基本操作。访问和修改某个元素可以通过"[ ]"和迭代器iterator实现。对于删除和添加,目前本人只会通过iterator的erase函数实现删除中间某个元素,用iterator的inser函数或是 push_back实现。iterator的操作就像指针一样。
最近用vector的时候出现过报错 vector iterator not dereferencable。这种错通常是iterator指向超出了vector的范围的无效的地方。单步调试发现是push_back后,超出空间,重新分配了内存,原来的iterator无效了。因此需要给iterator重新指向新的的内存空间。
int main()
{
std::vector<int> mytracks;
int a=0,b=1,c=2,d=3;
std::vector<int>::iterator p;
int e;
int i;
mytracks.push_back(a);
mytracks.push_back(b);
mytracks.push_back(c);
mytracks.push_back(d);
for(p=mytracks.begin(),i=0;p!=mytracks.end();)
{
if((*p)==3)
{
e=4;
mytracks.push_back(e);
e=5;
mytracks.push_back(e);
p=mytracks.begin()+i;//重新指向新的内存空间
}
if((*p)==4)
{
p=mytracks.erase(p);
std::cout<<"erase 4"<<std::endl;
}
else
{
std::cout<<(*p)<<std::endl;
p++;
i++;
}
}
system("pause");
return 0;
}
结果应该是
0
1
2
3
erase 4
5