前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】STL 算法 - 拷贝替换算法 ( 元素复制算法 - copy 函数 | 元素替换算法 - replace 函数 | 替换符合要求的元素算法 - replace_if 函数 )

【C++】STL 算法 - 拷贝替换算法 ( 元素复制算法 - copy 函数 | 元素替换算法 - replace 函数 | 替换符合要求的元素算法 - replace_if 函数 )

作者头像
韩曙亮
发布2024-01-17 08:21:31
1230
发布2024-01-17 08:21:31
举报

一、元素复制算法 - copy 函数

1、函数原型分析

在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 copy 元素复制算法函数 用于 将 一个容器中的元素 复制 到 另外一个 容器中 ;

copy 元素赋值函数 将 输入容器 的 [ 起始迭代器, 终止迭代器 ) 范围 内的 元素 复制 到输出序列中 , 从输出容器 的 指定开始位置迭代器 开始 存放 被复制过来的元素 ;

复制元素操作完成后 , 输出容器中 对应 起始位置迭代器 之后的元素 将被 输入容器 中的元素替换 ;

最终 copy 函数 返回一个迭代器 , 该迭代器 指向 输出容器 中最后一个被复制元素的下一个位置 ;

copy 元素复制算法 函数原型 如下 :

代码语言:javascript
复制
template <class InputIterator, class OutputIterator>  
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result);
  • 参数解析 :
    • InputIterator first 参数 : 输入容器 ( 被复制容器 ) 的 迭代器范围 的 起始迭代器 ( 包含该迭代器指向的元素 ) ;
    • InputIterator last 参数 : 输入容器 ( 被复制容器 ) 的 迭代器范围 的 终止迭代器 ( 不包含该迭代器指向的元素 ) ;
    • OutputIterator result 参数 : 输出容器 ( 复制目的地 ) 的 迭代器范围 的 起始迭代器 ( 包含该迭代器指向的元素 ) ;
  • 返回值解析 : OutputIterator 类型的迭代器 是 输出容器 ( 复制目的地 ) 的 迭代器 , 该 迭代器 指向 " 被拷贝的最后一个元素 的下一个位置 " ;

代码示例 :

代码语言:javascript
复制
	// 输入容器
	vector<int> source{9, 5, 2, 7};

	// 输出容器 该容器 空间大小不能小于 输入的迭代器范围
	vector<int> destination(source.size());

	// 遍历打印容器中元素内容
	copy(source.begin(), source.end(), destination.begin());

2、代码示例

代码示例 :

代码语言:javascript
复制
#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"

int main() {

	// 输入容器
	vector<int> source{9, 5, 2, 7};

	// 输出容器 该容器 空间大小不能小于 输入的迭代器范围
	vector<int> destination(source.size());

	// 遍历打印容器中元素内容
	copy(source.begin(), source.end(), destination.begin());

	// 遍历打印容器中元素内容
	for_each(destination.begin(), destination.end(), [](int a) {
		cout << a << " ";
		});
	cout << endl;
	
	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
	return 0;
};

执行结果 :

9 5 2 7 Press any key to continue . . .

在这里插入图片描述
在这里插入图片描述

二、元素替换算法 - replace 函数


1、函数原型分析

在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 replace 元素替换算法函数 用于 将 一个容器中的 指定迭代器范围 的 元素 中 将 指定的 A 值 替换为 B 值 ;

replace 元素替换函数 将 输入容器 的 [ 起始迭代器, 终止迭代器 ) 范围 内的 元素 指定的 A 值 替换为 B 值 ;

replace 元素替换算法 函数原型 如下 :

代码语言:javascript
复制
template <class ForwardIterator, class T>  
void replace(ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value);
  • 参数解析 :
    • ForwardIterator first 参数 : 输入容器 ( 被复制容器 ) 的 迭代器范围 的 起始迭代器 ( 包含该迭代器指向的元素 ) ;
    • ForwardIterator last 参数 : 输入容器 ( 被复制容器 ) 的 迭代器范围 的 终止迭代器 ( 不包含该迭代器指向的元素 ) ;
    • const T& old_value 参数 : 被替换的 原容器中的 元素值 ;
    • const T& new_value 参数 : 进行替换插入容器的 新的元素值 ;
  • 返回值解析 : 该函数返回值为 void , 即 没有返回值 ;

代码示例 :

代码语言:javascript
复制
	// 输入容器
	vector<int> source{ 9, 5, 2, 7 };

	// 将容器中的 2 替换为 3 
	replace(source.begin(), source.end(), 2, 3);

2、代码示例

代码示例 :

代码语言:javascript
复制
#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"

int main() {

	// 输入容器
	vector<int> source{ 9, 5, 2, 7 };

	// 将容器中的 2 替换为 3 
	replace(source.begin(), source.end(), 2, 3);

	// 遍历打印容器中元素内容
	for_each(source.begin(), source.end(), [](int a) {
		cout << a << " ";
		});
	cout << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
	return 0;
};

执行结果 :

9 5 3 7 请按任意键继续. . .

在这里插入图片描述
在这里插入图片描述

三、替换符合要求的元素算法 - replace_if 函数


1、函数原型分析

在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 replace 元素替换算法函数 用于 将 一个容器中的 指定迭代器范围 的 符合要求的 元素 替换为 新的 值 ;

replace 元素替换函数 将 输入容器 的 [ 起始迭代器, 终止迭代器 ) 范围 内的 元素 中 符合要求的 元素 替换为 新的 值 ;

replace_if 替换符合要求的元素算法 函数原型 如下 :

代码语言:javascript
复制
template <class ForwardIterator, class UnaryPredicate, class T>  
void replace_if(ForwardIterator first, ForwardIterator last, UnaryPredicate p, const T& new_value);
  • 参数解析 :
    • ForwardIterator first 参数 : 输入容器 ( 被复制容器 ) 的 迭代器范围 的 起始迭代器 ( 包含该迭代器指向的元素 ) ;
    • ForwardIterator last 参数 : 输入容器 ( 被复制容器 ) 的 迭代器范围 的 终止迭代器 ( 不包含该迭代器指向的元素 ) ;
    • UnaryPredicate p 参数 : 一元谓词 , 将容器中的元素传入该谓词 , 如果返回 true 则替换该元素 , 否则不进行处理 ;
    • const T& new_value 参数 : 进行替换插入容器的 新的元素值 ;
  • 返回值解析 : 该函数返回值为 void , 即 没有返回值 ;

代码示例 :

代码语言:javascript
复制
bool is_big_than_3(int num) {
	return num > 3;
}

int main() {

	// 输入容器
	vector<int> source{ 9, 5, 2, 7 };

	// 将容器中的 大于 3 的值都替换为 888
	replace_if(source.begin(), source.end(), is_big_than_3, 888);
}

2、代码示例

代码示例 :

代码语言:javascript
复制
#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"

bool is_big_than_3(int num) {
	return num > 3;
}

int main() {

	// 输入容器
	vector<int> source{ 9, 5, 2, 7 };

	// 将容器中的 大于 3 的值都替换为 888
	replace_if(source.begin(), source.end(), is_big_than_3, 888);

	// 遍历打印容器中元素内容
	for_each(source.begin(), source.end(), [](int a) {
		cout << a << " ";
		});
	cout << endl;

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
	return 0;
};

执行结果 :

888 888 2 888 请按任意键继续. . .

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、元素复制算法 - copy 函数
    • 1、函数原型分析
      • 2、代码示例
      • 二、元素替换算法 - replace 函数
        • 1、函数原型分析
          • 2、代码示例
          • 三、替换符合要求的元素算法 - replace_if 函数
            • 1、函数原型分析
              • 2、代码示例
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档