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

STL vector iterator giving core dump

本文关键字:核心 转储 迭代器 STL      更新时间:2023-10-16
#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将在第一次插入时递增。

Insert的返回类型对您有利。要解决您的问题,您只需要使用返回的值重新对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<int> v;
v.reserve(1000);
vector<int>::iterator itr=v.begin();
v.insert(itr,10,100); //itr not invalidated
v.insert(itr,10,100);

因为向量开始时为空,所以第一个v.insert(itr,10,100);会增加其大小,从而使任何迭代器无效,所以第二次插入失败,因为迭代器不再有效。