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

论坛 期权论坛 脚本     
nimin   2020-12-20 05:58   12   0

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

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

*/

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1012780
帖子:202556
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP