迭代器

来源:互联网 发布:js中使用java变量 编辑:程序博客网 时间:2024/05/24 01:00

!但凡使用迭代器的循环体,不要对迭代器所属容器作添加、删除操作,因为那会使迭代器失效。
!添加、删除vector、string、deque元素的循环程序必须考虑每个循环步中都更新迭代器、引用或指针。
!添加、删除vector、string、deque元素后,原来end返回的迭代器总是会失效,所以不能在循环之前保存end返回的迭代器

#include <iostream>#include <cstdio>#include<vector>using namespace std;using namespace cv;void DeleteLeave(vector<int>&n){    auto iter = n.begin();    while (iter != n.end())    {        if (*iter % 2)        {            iter = n.insert(iter, *iter);//复制当前元素并复制到迭代器之前            iter += 2;//迭代器跳过插入的元素及当前元素        }        else        {            iter = n.erase(iter);//迭代器指向删除的元素之后的元素        }    }}void main(){       vector<int>n = { 1, 2, 3, 4, 5 };       DeleteLeave(n);    for (auto iter = n.begin(); iter != n.end(); iter++)    {        cout << *iter<<endl;    }   }

。…………。……。………………未完待续

0 0