C++ std::unique() 函数说明

2019-06-19  本文已影响0人  book_02

说明

用途如其名,使容器内的元素唯一化。
但是用法要稍微注意一下。

头文件

#include <algorithm>

函数原型说明

template< class ForwardIt >
ForwardIt unique( ForwardIt first, ForwardIt last );

参数:first,last是两个迭代器,表明unique的范围。
返回值:返回一个迭代器,这个迭代器指向最后一个不重复元素的下一个值

unique() 会修改迭代器范围内的数据的,unique()本身不会删除数据,只是把不重复的元素放在容器的前面部分。

如果要删除不需要的元素,要另外借助erase()去删除。

unique()的参数好理解,就是返回值有些难理解,下面举例说明。

例子

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cctype>
 
int main() 
{
    // remove duplicate elements
    std::vector<int> v{1,2,3,1,2,3,3,4,5,4,5,6,7};
    std::sort(v.begin(), v.end()); // 1 1 2 2 3 3 3 4 4 5 5 6 7 
    auto last = std::unique(v.begin(), v.end());
    // v  {1 2 3 4 5 6 7 x x x x x x} , x represent uncertain element
    v.erase(last, v.end()); 
    for (int i : v)
      std::cout << i << " ";
    std::cout << "\n";
}
1 2 3 4 5 6 7

返回值last是指向7后的第一个x的迭代器

unique()本身不删除元素,只是把不重复的元素放在容器的前面部分,后面的部分保持原来的顺序。
如果把上面的代码的v.erase(last, v.end());删除,则结果如下,后面的顺序是原来的元素顺序:

1 2 3 4 5 6 7 4 4 5 5 6 7

参考

https://zh.cppreference.com/w/cpp/algorithm/unique

上一篇 下一篇

猜你喜欢

热点阅读