cb43a_c++_STL_算法_删除_(1)remove_remove_if

cb43a_c++_STL_算法_删除_(1)remove_remove_if
remove()
remove_if()

 

注意:
1.并不是真正的删除,而是把后面的元素向前移动,覆盖被删除元素,元素个数并没有减少
最后的一位或者两个的数据向前移动后,最后的数据没有其他数据覆盖,所以数据依然存在。
2.返回值是:新的逻辑终点,删除后,都采用逻辑终点。
error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可

//真正的删除用list的成员函数erase

 1 /*cb43a_c++_STL_算法_删除_(1)remove_remove_if
 2 remove()
 3 remove_if()
 4 
 5 注意:
 6 1.并不是真正的删除,而是把后面的元素向前移动,覆盖被删除元素,元素个数并没有减少
 7 最后的一位或者两个的数据向前移动后,最后的数据没有其他数据覆盖,所以数据依然存在。
 8 2.返回值是:新的逻辑终点,删除后,都采用逻辑终点。
 9 error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
10 vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可
11 
12 //真正的删除用list的成员函数erase
13 
14 
15 */
16 #include <iostream>
17 #include <algorithm>
18 #include <list>
19 #include <vector>
20 #include <functional>
21 
22 
23 using namespace std;
24 template <typename TT>
25 void print(TT &il)
26 {
27     for (TT::iterator iter = il.begin(); iter != il.end(); ++iter)
28     
29         cout << *iter << ' ';
30     cout << endl;
31 }
32 
33 int main()
34 {
35     list<int> ilist;
36     for (int i = 1; i <= 6; ++i)
37     {
38         ilist.push_front(i);
39         ilist.push_back(i);
40     }
41     print(ilist);
42     
43     list<int>::iterator end;
44     end=remove(ilist.begin(), ilist.end(), 3);//返回的是一个逻辑终点。不是ilist.end的位置
45     cout << "3删除后的情况:" << endl;
46     print(ilist);
47 
48     cout << "返回一个逻辑终点的情况:" << endl;
49 
50     for (list<int>::iterator iter = ilist.begin(); iter != end; ++iter)
51     {
52         cout << *iter << ' ';
53         
54     }
55     cout << endl;
56     cout << "一共删除了:" << distance(end, ilist.end()) << " 个元素" << endl;
57 
58     cout << "真正的删除,erase后的结果。" << endl;
59     ilist.erase(end, ilist.end());
60     print(ilist);
61 
62     vector<int> ivec;
63     for (int i = 2; i <= 6; ++i)
64         ivec.push_back(i);
65     for (int i = 4; i <= 9; ++i)
66         ivec.push_back(i);
67     for (int i = 1; i <= 7; ++i)
68         ivec.push_back(i);
69     cout << "vector里面的数据:" << endl;
70     print(ivec);
71 
72     cout << "删除5,remove与erase结合" << endl;
73     ivec.erase(remove(ivec.begin(), ivec.end(), 5),ivec.end());
74     print(ivec);
75 
76     cout << "remove_if结合预定义的函数对象进行操作,删除小于5的数,实现真正的删除" << endl;
77     //remove_if返回一个迭代器的位置,然后,erase迭代器之间的数据。
78     ivec.erase(remove_if(ivec.begin(), ivec.end(), bind2nd(less<int>(), 5)), ivec.end());
79     print(ivec);
80     return 0;
81 }

 

posted @ 2020-02-24 12:29  txwtech  阅读(147)  评论(1编辑  收藏  举报