小记std::unique_copy使用方法

因博主工作经验有限,只能通过有限的使用场景来介绍该特性
https://en.cppreference.com/w/cpp/algorithm/unique_copy

使用场景

将一些元素拷贝到另一个地方,可以定义重复的规则,拷贝出来之后是不带有连续相同元素的元素集合

如果需要使用std::unique_copy,需要包含头文件#include <algorithm>

支持情况如下:
在这里插入图片描述

参数

first, last - 想要处理的元素始末位置
d_first - 目标存储位置(开始放置结果的开始位置)
policy - 执行策略
p - 规则,当返回为true时表示两个元素重复

示例

1. 自定义判重逻辑

cppreference给出的示例:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
 
int main()
{
    std::string s1 {"The      string    with many       spaces!"};
    std::cout << "before: " << s1 << '\n';
 
    std::string s2;
    std::unique_copy(s1.begin(), s1.end(), std::back_inserter(s2),
                     [](char c1, char c2) { return c1 == ' ' && c2 == ' '; });
 
    std::cout << "after:  " << s2 << '\n';
}

在这里是将字符串s1中的内容拷贝到字符串s2当中,当两个字符均为空格的时候,标识为重复,返回true,执行结果为:

before: The      string    with many       spaces!
after:  The string with many spaces!

在拷贝的时候将连续且重复的空格去除掉了

2. 有默认的判重逻辑

如果为int等这种可以比较是否相等的元素,可以只写参数中的前两行:
first, last - 想要处理的元素始末位置
d_first - 目标存储位置(开始放置结果的开始位置)
示例如下:

#include <algorithm>
#include <iostream>
int main()
{
	std::vector<int> v{1, 1, 2, 2, 3, 3, 4, 4, 5, 5};
	std::vector<int> distVec;
	std::unique_copy(v.begin(), v.end(), std::back_inserter(distVec));
	for(const auto&  t : distVec)
	{
		std::cout << t << " ";
	}
	return 0;
}

输出结果如下:

1 2 3 4 5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值