zoukankan      html  css  js  c++  java
  • stl 迭代器失效

    1、对于基于连续内存的容器,容器元素的增删,有可能会导致迭代器的失效。考虑:

    int main(int argc, char* argv[])
    {
    vector<int> intVec;
    intVec.push_back(1);
    intVec.push_back(2);
    intVec.push_back(3);
    
    vector<int>::iterator iter1 = intVec.begin();
    vector<int>::iterator iter2 = iter1+1;
    vector<int>::iterator iter3 = iter1+2;
    int& ri = intVec[1];
    
    int* p1 = &(*iter2);
    int* p2 = &ri;
    
    intVec.erase(iter1);
    
    printf("iter2[%d]
    ",*iter2);
    printf("ri[%d]
    ",ri);
    printf("p1[%d]
    ",*p1);
    printf("p2[%d]
    ",*p2);
    
    getchar();
    }

    2、通过Memory可以内存的变化,删除之前是 1 2 3 ,删除之后是2 3,删除iter1会导致迭代器iter2和ri失效。迭代器和引用,底层都是指针,删除iter1,指针的值不变,iter2和ri的取值是3。注意:Debug模式下,iter2解引用会导致 Debug Assertion Failed。
    3、删除iter3,不会导致iter2和ri失效。
    4、对intVec添加元素或者插入元素,导致整个内存重分配,会导致所有迭代器失效。

  • 相关阅读:
    高斯核函数的代码体现
    程序编译
    DoH
    随笔1
    获取节点值的方式
    DOM解析XML
    URLConnection发送请求,并接收数据
    myeclipse编译后的jsp文件存放位置
    各种中文乱码
    各种提交的区别
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4575594.html
Copyright © 2011-2022 走看看