总结了一下STL循环删除元素,自己写程序做一个例子,我是在VS2010上做的实验,顺便复习一下模板知识
- #include <iostream>
- #include <vector>
- #include <list>
- #include <deque>
- #include <map>
- #include <string>
- using namespace std;
- template<typename T>
- void initcontainer(T& container)
- {
- for (int i = 0; i < 10; i++)
- {
- container.push_back(i);
- }
- }
- template<>
- void initcontainer(map<int,string>& container)
- {
- container[1] = "test map1";
- container.insert(pair<int,string>(2,"test map2"));
- container.insert(map<int,string>::value_type(3,"delete"));
- container[4] = "test map4";
- cout<<endl;
- }
- template<typename T>
- void print(T& container)
- {
- T::iterator iter;
- for (iter = container.begin(); iter != container.end(); ++iter)
- {
- cout<<*iter<<" ";
- }
- cout<<endl;
- }
- template<>
- void print(map<int,string>& container)
- {
- map<int,string>::iterator iter;
- for (iter = container.begin(); iter != container.end(); ++iter)
- {
- cout<<iter->first<<" "<<iter->second<<endl;
- }
- cout<<endl;
- }
- template<typename T>
- void delcontainer(T& container,int nelement)
- {
- T::iterator iter;
- for (iter = container.begin(); iter != container.end();)
- {
- if (*iter == nelement)
- {
- iter = container.erase(iter);
- }
- else
- {
- ++iter;
- }
- }
- }
- template<>
- void delcontainer(map<int,string>& container,int nelement)
- {
- map<int,string>::iterator iter;
- for (iter = container.begin(); iter != container.end();)
- {
- if (iter->first == nelement)
- {
- iter = container.erase(iter);
- }
- else
- {
- ++iter;
- }
- }
- }
- int main()
- {
- {
- // vector操作
- vector<int> vect;
- vector<int>::iterator itervect;
- initcontainer<vector<int>>(vect);
- cout<<"-----vector-----"<<endl;
- print<vector<int>>(vect);
- delcontainer<vector<int>>(vect,5);
- print<vector<int>>(vect);
- }
- {
- // list操作
- list<int> lst;
- list<int>::iterator iterlst;
- initcontainer<list<int>>(lst);
- cout<<"-----list-----"<<endl;
- print<list<int>>(lst);
- delcontainer<list<int>>(lst,5);
- // 另一种删除方式
- for (iterlst = lst.begin(); iterlst != lst.end(); ++iterlst)
- {
- lst.remove(4);
- }
- print<list<int>>(lst);
- }
- {
- // deque操作
- deque<int> dque;
- deque<int>::iterator iterdque;
- initcontainer<deque<int>>(dque);
- cout<<"-----deque-----"<<endl;
- print<deque<int>>(dque);
- delcontainer<deque<int>>(dque,5);
- print<deque<int>>(dque);
- }
- {
- // map操作
- map<int,string> mapstr;
- map<int,string>::iterator itermap;
- initcontainer<map<int,string>>(mapstr);
- cout<<"-----map-----"<<endl;
- print<map<int,string>>(mapstr);
- delcontainer<map<int,string>>(mapstr,2);
- //通过key删除
- for (itermap = mapstr.begin(); itermap != mapstr.end(); )
- {
- if( itermap->second == "delete" )
- {
- itermap = mapstr.erase(itermap);
- }
- else
- {
- ++itermap;
- }
- }
- print<map<int,string>>(mapstr);
- }
- system("pause");
- return 0;
- }
实验结果:
-----vector-----
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 6 7 8 9
-----list-----
0 1 2 3 4 5 6 7 8 9
0 1 2 3 6 7 8 9
-----deque-----
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 6 7 8 9
-----map-----
1 test map1
2 test map2
3 delete
4 test map4
1 test map1
4 test map4
请按任意键继续. . .
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 6 7 8 9
-----list-----
0 1 2 3 4 5 6 7 8 9
0 1 2 3 6 7 8 9
-----deque-----
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 6 7 8 9
-----map-----
1 test map1
2 test map2
3 delete
4 test map4
1 test map1
4 test map4
请按任意键继续. . .