C++:erase的使用

问题

将数组拷贝到一个vector和一个list中。使用单迭代器版本的erase从list中删除奇数元素,从vector中删除偶数元素.

注意:[删除元素的成员函数并不检查[要删除的元素]是否存在,因此删除之前必须保证其存在.]erase删除deque中除首尾位置之外的任何元素都会使所有迭代器,引用,指针失效。指向vector或string中删除点之后位置的迭代器、引用和指针都会失效。

C++.
image-2046

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*************************************************************************
    > File Name: test.9.26.cpp
    > Author: puruidong
    > Mail: 1@w1520.com
    > Created Time: 2014年05月15日
 ************************************************************************/

#include<iostream>
#include<vector>
#include<list>
#include<iterator>
using namespace std;
//使用下面的数组,将数组拷贝到一个vector和一个list中.使用单迭代器版本的erase从list中删除奇数元素,从vector中删除偶数元素.


int main()
{
    int ia[] = {0,1,1,2,3,5,8,13,21,55,89};
    size_t sizea = sizeof(ia)/sizeof(*ia);
    vector<int> vec(ia,ia+sizea);
    list<int> lis(ia,ia+sizea);
    for(vector<int>::iterator it=vec.begin();it!=vec.end();)
    {//从vector中删除偶数.
        if(*it%2==0)
        {
            it=vec.erase(it);
        }else
        {
            ++it;
        }
    }
    for(list<int>::iterator its=lis.begin();its!=lis.end();)
    {//从list中删除奇数元素.
        if(*its%2!=0)
        {
           its= lis.erase(its);
        }else
        {
            ++its;
        }
       
    }
    for(vector<int>::const_iterator itvec=vec.cbegin();itvec!=vec.cend();++itvec)
    {//只输出不更改.
        cout << "输出vector中的数据:" << *itvec << endl;
    }
   
    return 0;
}

更多信息可参考:erase的使用

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据