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添加元素或者插入元素,导致整个内存重分配,会导致所有迭代器失效。

  • 相关阅读:
    [高级软件工程教学]总成绩排行榜(12.20更新)
    [高级软件工程教学]团队Alpha阶段成绩汇总
    ab & webbench
    httpClient 3
    xpath 定位补充
    命令补充
    feed4testng
    自动化测试架构整理
    识别元素
    appium小例子
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4575594.html
Copyright © 2011-2022 走看看