vector,list,mapは条件に合致する要素を遍歴的に削除する
2871 ワード
ソースコードを直接見て、詳しい説明があります.
/*
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
*/