您的位置:首页 > 其它

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

2014-10-30 17:16 621 查看
直接看源码,内有详细解释

 

/*
测试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

*/


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: