unique和unique_copy函数的应用

unique函数的功能是:去除相邻的重复元素(只保留一个)。函数参数:unique(first,last,compare);//first为容器的首迭代器,last为容器的末迭代器,compare为比较函数(可略写)。

注意:unique函数也并非是真正的删除了元素,一般要与erase成员函数 或resize成员函数互相配合使用。具体可参见博文:http://blog.sina.com.cn/s/blog_6d79d83a0100wh1f.html

看一个例题:给你一个字符串,删除字符串中相邻的重复元素,并打印字符串。

代码:

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
 
   stringstr;
   cin>>str;
   str.erase(unique(str.begin(),str.end()),str.end());
   //str.resize(unique(str.begin(),str.end())-str.begin());
   cout<<str<<endl;
    return0;
}


输入:
abbbccbba
输出:
abcba

unique_copy与unique的唯一区别在于:unique_copy会将进行删除相邻重复元素的结果保存在另外一个结果容器中。函数参数:unique_copy(first,last,result,compare);//first为容器的首迭代器,last为容器的末迭代器,result为保存结果的容器(原容器的内容不变),compare为比较函数(可略写)。
还是上一例题,这次使用unique_copy来实现。
代码:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
    stringfirst,second;
   cin>>first;
   second.resize(first.size());
   second.resize(unique_copy(first.begin(),first.end(),second.begin())-second.begin());
   cout<<second<<endl;
    return0;
}


输入:
abbbccbba
输出:
abcba
这些都是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、付费专栏及课程。

余额充值