STL矢量迭代器给出核心转储

时间:2016-07-23 09:27:42

标签: c++ stl

#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会增加。

2 个答案:

答案 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);