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 }