unique &unique_copy

 

unique (ForwardIterator first, ForwardIterator last);

unique (ForwardIterator first, ForwardIterator last, BinaryPredicate pred);

类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素。该算法删除相邻的重复元素(不相邻的元素无法删除),

然后重新排列输入范围内的元素(没有进行排序,按照原序列排列),并且返回一个迭代器(容器的长度没变,只是元素顺序

改变了),表示无重复的值范围得结束。

 

unique_copy (InputIterator first, InputIterator last,OutputIterator result);

unique_copy (InputIterator first, InputIterator last,OutputIterator result, BinaryPredicate pred);

unique_copy 唯一的区别在于:unique_copy 接受第三个迭代器实参,用于指定复制不重复元素的目标序列。

 

ex:

// unique algorithm example
#include <iostream>     
#include <algorithm> #include <vector> bool myfunction (int i, int j) { return (i==j); } int main () { int myints[] = {10,20,20,20,30,30,20,20,10}; // 10 20 20 20 30 30 20 20 10 std::vector<int> myvector (myints,myints+9); // using default comparison: std::vector<int>::iterator it; it = std::unique (myvector.begin(), myvector.end()); // 10 20 30 20 10 ? ? ? ? // ^ myvector.resize( std::distance(myvector.begin(),it) ); // 10 20 30 20 10 // using predicate comparison: std::unique (myvector.begin(), myvector.end(), myfunction); // (no changes) // print out content: std::cout << "myvector contains:"; for (it=myvector.begin(); it!=myvector.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }

转载于:https://www.cnblogs.com/Mr-Zhong/p/4551094.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这些都是C++标准库中的算法函数,具体用法如下: 1. std::remove 这个函数可以用于从一个容器中移除指定值,它的用法如下: ``` template< class ForwardIt, class T > ForwardIt remove( ForwardIt first, ForwardIt last, const T& value ); ``` 其中,`first` 和 `last` 分别表示迭代器的起始和结束位置,`value` 表示要移除的值。该函数返回指向新的结束位置的迭代器,被移除的元素仍然存在于容器中,只是处于未定义状态,需要使用 erase 函数删除。 2. std::copy_if 这个函数可以用于将满足指定条件的元素拷贝到目标容器中,它的用法如下: ``` template< class InputIt, class OutputIt, class UnaryPredicate > OutputIt copy_if( InputIt first, InputIt last, OutputIt d_first, UnaryPredicate pred ); ``` 其中,`first` 和 `last` 分别表示迭代器的起始和结束位置,`d_first` 表示目标容器的起始位置,`pred` 是一个一元谓词,用于指定拷贝条件。 3. std::partition 这个函数可以用于将容器中满足指定条件的元素移动到容器的前面,不满足条件的元素移动到后面,它的用法如下: ``` template< class BidirectionalIt, class UnaryPredicate > BidirectionalIt partition( BidirectionalIt first, BidirectionalIt last, UnaryPredicate pred ); ``` 其中,`first` 和 `last` 分别表示迭代器的起始和结束位置,`pred` 是一个一元谓词,用于指定移动条件。该函数返回一个迭代器,指向最后一个满足条件的元素之后的位置。 4. std::unique 这个函数可以用于移除相邻的重复元素,它的用法如下: ``` template< class ForwardIt > ForwardIt unique( ForwardIt first, ForwardIt last ); ``` 其中,`first` 和 `last` 分别表示迭代器的起始和结束位置。该函数返回指向新的结束位置的迭代器,被移除的元素仍然存在于容器中,只是处于未定义状态,需要使用 erase 函数删除。 5. std::unique_copy 这个函数可以用于将相邻的重复元素去重后拷贝到目标容器中,它的用法如下: ``` template< class InputIt, class OutputIt > OutputIt unique_copy( InputIt first, InputIt last, OutputIt d_first ); ``` 其中,`first` 和 `last` 分别表示迭代器的起始和结束位置,`d_first` 表示目标容器的起始位置。该函数返回指向新的结束位置的迭代器,被移除的元素仍然存在于容器中,只是处于未定义状态,需要使用 erase 函数删除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值