码迷,mamicode.com
首页 > 编程语言 > 详细

C++ iterator validity (迭代器失效)

时间:2015-08-10 17:42:17      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

#include<iostream>
#include<vector>
#include<algorithm>  //for_each
using namespace std;

int main()
{
    vector<int> iVec;
    iVec.reserve(10);
    for(int i=1;i<8;i++)
    {
        iVec.push_back(i);
    }
   vector<int>::iterator iter=find(iVec.begin(),iVec.end(),3); //指向3
   cout<<*iter<<endl;

   iVec.erase(iVec.begin(),iVec.begin()+3); //数据增加或删除导致的数据迁移,元素次序发生变化
   cout<<*iter<<endl;
   iVec.insert(iVec.begin(),99);
   cout<<*iter<<":"<<&(*iter)<<endl;

   for(int i=1;i<10;i++)                    //空间扩展导致整个容器迁移,所有的iterator失效
       iVec.push_back(i*100);
   cout<<*iter<<":"<<&(*iter)<<endl;        //和上面输出相同,是因为之前的vector还没有释放

   for_each(iVec.begin(),iVec.end(),        //使用for_each() algorithm 和 lamda expression 输出整个vector
            [](int i){cout<< i << ,;});
    return 0;

    //总的来说是iterator指向的地址不会改变,变化的是值
}

 

C++ iterator validity (迭代器失效)

标签:

原文地址:http://www.cnblogs.com/wxquare/p/4718584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!