Advertisement

在vector中插入一个新元素导致迭代器出现异常

阅读量:

向vector中Insert一个新的元素之后迭代器异常

当我们向vector中添加了新的元素时,在尝试继续使用原有的迭代器时就会出现迭代器异常行为(甚至像iter++这样的操作都会使得系统崩溃)。

复制代码
    if ((*iter)[0] == '+' || (*iter)[0] == '-')
      {
    vec.insert(iter, "0");
    iter++   //这里程序会崩溃
      }	                

根本原因在于,在新增加的元素引入后,原来的存储空间会被替换为新的存储空间;此时迭代器处于一个非法的位置上;对它进行任何操作都会导致失败。

解决办法包括对这个迭代器执行更新操作:首先记录原始信息即原始迭代器与vec.begin()之间的距离;接着计算新迭代器起始位置与vec.begin()之间的差值;最后将这两个数值相加即可完成更新。

复制代码
    if ((*iter)[0] == '+' || (*iter)[0] == '-')
       {
     int temp = iter - vec.begin();
     vec.insert(iter, "0");
     iter = vec.begin() + temp + 1;
       }
``

全部评论 (0)

还没有任何评论哟~