cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据

cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据
unique(b,e),删除连续性的,删除重复的数据,比如如果有两个连续的5,5,则留下一个。
unique(b,e,p)
unique_copy(b1,e1,b2)
unique_copy(b1,e1,b2,p)
copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter

删除性算法

注意:
1.应该有一个unique_if(),但是没有
2.应该有一个unique_copy_if(),但是没有

STL算法都是针对容器使用的。
error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可

 1 /*cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据
 2 unique(b,e),删除连续性的,删除重复的数据,比如如果有两个连续的5,5,则留下一个。
 3 unique(b,e,p)
 4 unique_copy(b1,e1,b2)
 5 unique_copy(b1,e1,b2,p)
 6     copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter
 7 
 8 删除性算法
 9 
10 注意:
11   1.应该有一个unique_if(),但是没有
12   2.应该有一个unique_copy_if(),但是没有
13 
14   STL算法都是针对容器使用的。
15    error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
16    vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可
17 */
18 
19 #include <iostream>
20 #include <algorithm>
21 #include <functional>
22 #include <iterator>
23 #include <list>
24 
25 using namespace std;
26 
27 template <typename TT2>
28 void print(TT2 &ilist)
29 {
30     for (TT2::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
31         cout << *iter << ' ';
32     cout << endl;
33 }
34 bool differenceOne(int elem1, int elem2)//前一个比后一个大1或者小于1
35 {
36     return elem1 + 1 == elem2 || elem1 - 1 == elem2;
37 }
38 
39 int main()
40 {
41     int source[] = {1,4,4,6,1,2,2,3,1,6,6,6,5,7,5,4,4};
42     int sourceNum = sizeof(source) / sizeof(source[0]);
43     list<int> ilist;
44     copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter
45     print(ilist);
46 
47     cout << "删除连续重复的数据,只留下一个" << endl;
48     list<int>::iterator pos;
49     pos=unique(ilist.begin(), ilist.end());//返回的是迭代器的位置,定位在删除后的位置的下一个位置。
50     for (list<int>::iterator iter = ilist.begin(); iter != pos; ++iter)
51         cout << *iter << ' ';
52     cout << endl;
53     cout << "删除前:" << endl;
54 
55     copy(source, source + sourceNum, ilist.begin());
56     print(ilist);
57 
58     // 3,2,5,7,6,
59     //3比2大,把2删除,剩余:3,5,7,6
60     //3,5,比较,5大不作处理。
61     //5,7,不作处理
62     //7,6,把6删除。
63     //剩余3,5,7
64 
65 //cout << "这里的greater<>(),作用是如果前面的数比后面的数大,则删除后面的数" << endl;
66     pos = unique(ilist.begin(), ilist.end(), greater<int>());
67 
68     cout << "删除后:" << endl;
69     for (list<int>::iterator iter = ilist.begin(); iter != pos; ++iter)
70         cout << *iter << ' ';
71     cout << endl;
72 
73     copy(source, source + sourceNum, ilist.begin());
74     print(ilist);
75     cout << "使用unique_copy:" << endl;
76     unique_copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "));
77     cout << endl;
78 
79     cout << "前一个比后一个大1或者小于1,就删除后面的一个数" << endl;
80     unique_copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "), differenceOne);
81 
82 
83     return 0;
84 }
欢迎讨论,相互学习。 txwtech@163.com
原文地址:https://www.cnblogs.com/txwtech/p/12362075.html