#include<iostream.h>
#include<vector.h>
int main()
{
vector<int> v;
vector<int>::iterator itr=v.begin();
v.insert(itr,10,100);
v.insert(itr,10,100);
}
此程序在包含第二个插入后生成核心转储,无法理解为什么在第一次插入时itr会增加。
答案 0 :(得分:2)
因为向量从空开始,所以第一个v.insert(itr,10,100);
增加了它的大小,从而使任何迭代器无效,所以第二次插入失败,因为迭代器不再有效。
答案 1 :(得分:2)
插入回复类型对您有利。要解决您的问题,您只需要使用返回值重新设置itr
:
vector<int> v;
vector<int>::iterator itr=v.begin();
itr = v.insert(itr,10,100); //new begin
itr = v.insert(itr,10,100); //new begin
另一个解决方案是为vector预留空间:
vector<int> v;
v.reserve(1000);
vector<int>::iterator itr=v.begin();
v.insert(itr,10,100); //itr not invalidated
v.insert(itr,10,100);