STL——拷贝和替换算法

2023-12-30 22:20
文章标签 拷贝 stl 替换算法

本文主要是介绍STL——拷贝和替换算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

算法简介:

  • copy—— // 容器内指定范围的元素拷贝到另一容器中
  • replace—— // 将容器内指定范围的旧元素修改为新元素
  • replace_if—— // 容器内指定范围满足条件的元素替换为新元素
  • swap———— // 互换两个容器的元素

1.copy

函数原型:

  • copy(iterator beg, iterator end, iterator dest);——// 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置;beg 开始迭代器;end 结束迭代器;dest 目标起始迭代器
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//copy——拷贝算法
void Print(int val)
{cout << val << " ";
}
void test()
{vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);}v2.resize(v1.size());copy(v1.begin(), v1.end(), v2.begin());for_each(v2.begin(), v2.end(), Print);cout << endl;
}
int main()
{test();system("pause");return 0;
}

2.replace

函数原型:

  • replace(iterator beg, iterator end, oldvalue, newvalue);——// 将区间内旧元素 替换成 新元素;beg 开始迭代器;end 结束迭代器;oldvalue 旧元素;newvalue 新元素
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//replace——替换算法
class Print
{
public:void operator()(int val){cout << val << " ";}
};
void test()
{vector<int>v;v.push_back(10);v.push_back(70);v.push_back(60);v.push_back(90);v.push_back(80);v.push_back(40);v.push_back(80);cout << "替换前:" << endl;for_each(v.begin(), v.end(), Print());cout << endl;replace(v.begin(), v.end(), 80, 800);cout << "替换后:" << endl;for_each(v.begin(), v.end(), Print());cout << endl;
}
int main()
{test();system("pause");return 0;
}

 注:replace会替换区间内满足条件的所有元素。

3.replace_if

函数原型:

  • replace_if(iterator beg, iterator end, _pred, newvalue);——// 按条件替换元素,满足条件的替换成指定元素; beg 开始迭代器;end 结束迭代器; _pred 谓词;newvalue 替换的新元素
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//replace_if——替换算法
class Print
{
public:void operator()(int val){cout << val << " ";}
};
class Greater20
{
public:bool operator()(int val){return val >= 20;}
};
void test()
{vector<int>v;v.push_back(10);v.push_back(40);v.push_back(30);v.push_back(50);v.push_back(60);v.push_back(20);v.push_back(50);cout << "替换前:" << endl;for_each(v.begin(), v.end(), Print());cout << endl;replace_if(v.begin(), v.end(), Greater20(), 2000);cout << "替换后:" << endl;for_each(v.begin(), v.end(), Print());cout << endl;
}
int main()
{test();system("pause");return 0;
}

4.swap

函数原型:

  • swap(container c1, container c2);——// 互换两个容器的元素; c1容器1; c2容器2
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//swap——替换算法
void Print(int val)
{cout << val << " ";
}
void test()
{vector<int>v1;vector<int>v2;for (int i = 0; i < 10; i++){v1.push_back(i);v2.push_back(i + 100);}cout << "互换前: " << endl;for_each(v1.begin(), v1.end(), Print);cout << endl;for_each(v2.begin(), v2.end(), Print);cout << endl;cout << "互换后: " << endl;swap(v1, v2);for_each(v1.begin(), v1.end(), Print);cout << endl;for_each(v2.begin(), v2.end(), Print);cout << endl;
}
int main()
{test();system("pause");return 0;
}

注:swap交换的容器需要同种类型

这篇关于STL——拷贝和替换算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/554174

相关文章

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

C++ STL 适配器

系列文章目录 模板特例化,偏特化,左右值引用 https://blog.csdn.net/surfaceyan/article/details/126794013 C++ STL 关联容器 https://blog.csdn.net/surfaceyan/article/details/127414434 C++ STL 序列式容器(二) https://blog.csdn.net/surfac

C++ STL关联容器Set与集合论入门

1. 简介 Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树,其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。因此,Set中的元素总是顺序的。 Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相

Linux 使用rsync拷贝文件

显示进度条 rsync 可以显示进度条,您可以使用 --progress 或 -P 选项来显示每个文件的传输进度和已完成文件的统计信息。 显示进度条的常用选项: --progress 选项 使用 --progress 显示每个文件的传输进度信息:rsync -av --progress /src/ /dest/ -a:归档模式,表示递归拷贝并保持文件权限、时间戳等。-v:详细模式,显示更

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib

python基础语法十一-赋值、浅拷贝、深拷贝

书接上回: python基础语法一-基本数据类型 python基础语法二-多维数据类型 python基础语法三-类 python基础语法四-数据可视化 python基础语法五-函数 python基础语法六-正则匹配 python基础语法七-openpyxl操作Excel python基础语法八-异常 python基础语法九-多进程和多线程 python基础语法十-文件和目录操作

插件maven-search:Maven导入依赖时,使用插件maven-search拷贝需要的依赖的GAV

然后粘贴: <dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.26</version> </dependency>

JS手写实现深拷贝

手写深拷贝 一、通过JSON.stringify二、函数库lodash三、递归实现深拷贝基础递归升级版递归---解决环引用爆栈问题最终版递归---解决其余类型拷贝结果 一、通过JSON.stringify JSON.parse(JSON.stringify(obj))是比较常用的深拷贝方法之一 原理:利用JSON.stringify 将JavaScript对象序列化成为JSO

STL set整理

#include<set>#include<cstdio>#include<iterator>#include<iostream>#include<algorithm>using namespace std;//set 集合的操作//multisetset<int>Set1;set<int>Set2;set<int>Set3;/*begin() 返回指向第一个元素的迭代器

HDD 顺序和随机文件拷贝和存储优化策略

对于机械硬盘(HDD),顺序拷贝和随机拷贝涉及到磁头的移动方式和数据的读取/写入模式。理解这些概念对于优化硬盘性能和管理文件操作非常重要。 1. 顺序拷贝 定义: 顺序拷贝指的是数据从硬盘的一个位置到另一个位置按顺序连续读取和写入。这意味着数据在硬盘上的位置是线性的,没有跳跃或回溯。 特点: 磁头移动最小化:由于数据是连续的,磁头在读取或写入数据时只需要在磁盘的一个方向上移动,减少了寻道时