服务器之家

服务器之家 > 正文

vector, list, map在遍历时删除符合条件的元素实现方法

时间:2021-04-24 13:49     来源/作者:C语言教程网

直接看源码,内有详细解释

?
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
    测试vector, list, map遍历时删除符合条件的元素
    本代码测试环境: ubuntu12 + win7_x64
*/
 
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <iterator>
 
using namespace std;
 
void Remove1(vector<int> &vec, int num)
{
    for (vector<int>::iterator it = vec.begin(); it != vec.end();)
    {
        if (*it == num)
            it = vec.erase(it);
        else
            it++;
    }
}
 
void Remove2(list<int> &lst, int num)
{
    list<int>::iterator it;
    for (it=lst.begin(); it!=lst.end();)
    {
        if (*it == num)
        {
            lst.erase(it++);
        }
        else
            it++;
    }
}
 
void initMap(map<int, int>& m, int arr[], int arrLen)
{
    for(int i = 0; i < arrLen; i++)
        m[i] = arr[i];
}
 
void Remove_map(map<int, int>& m, int num)
{
    map<int, int>::iterator it;
 
    for(it = m.begin(); it != m.end();)
    {
        if (it->second == num)
            m.erase(it++);
        else
            it++;
    }
}
 
void displayMap(map<int, int>& m)
{
    map<int, int>::iterator it = m.begin();
    while(it != m.end())
    {
        cout << "key = " << it->first << ", value = " << it->second << endl;
        it++;
    }
    cout << endl;
}
 
int main(void)
{
    int arr[] = {1, 3, 5, 5, 5, 13, 7, 5, 7, 9};
    int arrLen = sizeof(arr) / sizeof(arr[0]);
 
#if 1
    // test vector
    vector<int> vec(arr, arr+arrLen);
    Remove1(vec, 5);
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
    cout << endl << endl;
#endif
 
    // test list
    list<int> lst(arr, arr+arrLen);
    Remove2(lst, 5);
    copy(lst.begin(), lst.end(), ostream_iterator<int>(cout, " "));
    cout << endl << endl;
 
    // test map
    map<int, int> m;
    initMap(m, arr, arrLen);
    Remove_map(m, 5);
    displayMap(m);
 
    return 0;
}
 
/*
Win7_x64运行结果:
1 3 13 7 7 9
 
1 3 13 7 7 9
 
key = 0, value = 1
key = 1, value = 3
key = 5, value = 13
key = 6, value = 7
key = 8, value = 7
key = 9, value = 9
 
Ubuntu12运行结果:
[zcm@cpp #54]$make
g++ -Wall -Os -DLINUX -o a a.cpp
[zcm@cpp #55]$./a
1 3 13 7 7 9
 
1 3 13 7 7 9
 
key = 0, value = 1
key = 1, value = 3
key = 5, value = 13
key = 6, value = 7
key = 8, value = 7
key = 9, value = 9
 
*/

以上就是小编为大家带来的小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧全部内容了,希望大家多多支持服务器之家~

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
返回顶部