#include <iostream>
#include <algorithm>
#include <list>
#include <set>
#include <functional>
#include <iterator>
using namespace std;
bool differenceOne(int elem1, int elem2)
{
return elem1 + 1 == elem2 || elem1 - 1 == elem2;
}
int main()
{
int source[] = { 1, 5, 5, 6, 8, 9, 2, 2, 2, 5, 4, 4, 4, 1, 3, 5, 2 };
int sourceNum = sizeof(source) / sizeof(source[0]);
list<int> ilist;
copy(source, source + sourceNum, back_inserter(ilist));
for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
cout << *iter << ' ';
cout << endl;
cout << endl << endl;
list<int>::iterator pos;
pos = unique(ilist.begin(), ilist.end()); // unique()是将连续的重复的数删除掉,
for (list<int>::iterator iter = ilist.begin(); iter != pos; ++iter)
cout << *iter << ' ';
cout << endl;
copy(source, source + sourceNum, ilist.begin());
for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
cout << *iter << ' ';
cout << endl;
pos = unique(ilist.begin(), ilist.end(),greater<int>()); // unique()是将连续的重复的数删除掉,
//greater<int>()这个是比较一个数与前边的数进行比较,要是比前边的小就将其删除掉,要是比前边的数大继续用这个大的数与下一个数进行比较,
// 最后排出来的结果是从小到大排序的,
for (list<int>::iterator iter = ilist.begin(); iter != pos; ++iter)
cout << *iter << ' ';
cout << endl;
cout << endl;
copy(source, source + sourceNum, ilist.begin());
for (list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
cout << *iter << ' ';
cout << endl;
unique_copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "));
cout << endl;
cout << endl;
// 这是谓词
unique_copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "),differenceOne);
cout << endl;
return 0;
}
删除算法3 unique 将连续相同的数删除
最新推荐文章于 2023-06-10 12:44:26 发布