第一个说的是upique(),将重复的 相邻的 重复的元素,排到后面去,即如果两个元素 相同 但是 不相邻,则不会去排序 <先将数组排序>
代码如下:
vector<int> vi{ 1,2,2,3,2,1,1,2,4 };
sort(vi.begin(), vi.end());
for_each(vi.begin(), vi.end(), [](int n) {cout << n << " "; });
cout << endl;
unique(vi.begin(), vi.end());
for_each(vi.begin(), vi.end(), [](int n) {cout << n << " "; });
效果图:
在这里如果相真正去除重复的元素,就要调用到auto容器和resize()重新指定容器有效个数,还有一个distance()是计算两个iterator直接的距离
代码如下:
vector<int> vi{ 1,2,2,3,2,1,1,2,4 };
sort(vi.begin(), vi.end());
for_each(vi.begin(), vi.end(), [](int n) {cout << n << " "; });
cout << endl;
auto result = unique(vi.begin(), vi.end());
vi.resize(distance(vi.begin(), result));
for_each(vi.begin(), vi.end(), [](int n) {cout << n << " "; });
效果图:
第二个说的是:unique_copy()将重复的 相邻的 重复的元素,排到后面去,然后用第三个参数back_inserter()将元素给到新容器里面去。即如果两个元素 相同 但是 不相邻,则不会去排序 <先将数组排序>
代码如下:
vector<int> mydeque{ 1,2,2,3,2,1,1,2,4 };
vector<int> a;
for_each(mydeque.begin(), mydeque.end(), [](int n) {cout << n << " "; });
sort(mydeque.begin(), mydeque.end());
cout << endl;
unique_copy(mydeque.begin(), mydeque.end(), back_inserter(a)); //插入迭代器
for_each(a.begin(), a.end(), [](int n) {cout << n << " "; });
效果图: