博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ STL常用算法-65-拷贝和替换算法
阅读量:4301 次
发布时间:2019-05-27

本文共 3145 字,大约阅读时间需要 10 分钟。

继续学习C++中常用的算法基本使用,这篇学习拷贝和替换算法,一共有四个,用来操作容器中指定范围的元素的拷贝和替换操作。

算法简介

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

 

1.copy 拷贝算法

函数原型:copy(iterator beg, iterator end, iterator dst);

参数解释:

第一个参数容器1的迭代器开始位置,参数2 容器1的迭代器结束位置,参数3 目标容器的迭代器的开始位置

#include 
#include
#include
#include
using namespace std;void Print01(int val){ cout << val << " ";};void test01(){ vector
v1; v1.push_back(10); v1.push_back(50); v1.push_back(30); v1.push_back(40); v1.push_back(20); // copy 拷贝算法 vector
v2; v2.resize(v1.size()); copy(v1.begin(), v1.end(), v2.begin()); //打印v2容器内容 for_each(v2.begin(), v2.end(), Print01); cout << endl;}int main(){ test01(); system("pause"); return 0;}

运行结果:

 

2.replace 替换算法

替换算法就是在指定范围内把旧元素替换成新元素,例如在一个数列中,把数字5替换成55.

函数原型:replace(iterator beg, iterator end, oldValue, newValue);

#include 
#include
#include
#include
using namespace std;void Print01(int val){ cout << val << " ";};void test01(){ vector
v1; v1.push_back(10); v1.push_back(5); v1.push_back(30); v1.push_back(40); v1.push_back(5); // replace 替换算法 replace(v1.begin(), v1.end(), 5, 55); //打印v2容器内容 for_each(v1.begin(), v1.end(), Print01); cout << endl;}int main(){ test01(); system("pause"); return 0;}

测试结果:

注意,如果填写要替换的值数列中找不到,改替换函数是不起作用的。

 

3.replace_if 条件替换算法

函数原型:replace_if(iterator beg, iterator end, _Pred, newValue);

第三个函数是一个谓词,也就是返回类型是bool的仿函数,普通函数这里不行

#include 
#include
#include
#include
using namespace std;class MyClass{public: bool operator()(int val) { return val < 30; }};void Print01(int val){ cout << val << " ";};void test01(){ vector
v1; v1.push_back(10); v1.push_back(15); v1.push_back(30); v1.push_back(40); v1.push_back(5); // replace_if 替换算法, 把小于30的元素都替换成200 replace_if(v1.begin(), v1.end(), MyClass(), 200); //打印v2容器内容 for_each(v1.begin(), v1.end(), Print01); cout << endl;}int main(){ test01(); system("pause"); return 0;}

代码运行结果:

 

4.swap 交换算法

这个前面也学习过,作用就是互换两个容器的元素

函数原型:swap(容器1,容器2);

注意事项:

1.两个容器必须是同类型

#include 
#include
#include
#include
using namespace std;class MyClass{public: bool operator()(int val) { return val < 30; }};void Print01(int val){ cout << val << " ";};void test01(){ vector
v1; vector
v2; for(int i=0; i < 10; i++) { v1.push_back(i); v2.push_back(i+100); } cout << "before merge。。" << endl; for_each(v1.begin(), v1.end(), Print01); cout << endl; for_each(v2.begin(), v2.end(), Print01); cout << endl; cout << "==============================" << endl; // swap算法,合并两个容器 swap(v1, v2); for_each(v1.begin(), v1.end(), Print01); cout << endl; for_each(v2.begin(), v2.end(), Print01); cout << endl;}int main(){ test01(); system("pause"); return 0;}

运行结果:

转载地址:http://hexws.baihongyu.com/

你可能感兴趣的文章
读书笔记_量化交易如何建立自己的算法交易01
查看>>
设计模式03_工厂
查看>>
设计模式04_抽象工厂
查看>>
设计模式05_单例
查看>>
设计模式06_原型
查看>>
设计模式07_建造者
查看>>
设计模式08_适配器
查看>>
设计模式09_代理模式
查看>>
设计模式10_桥接
查看>>
设计模式11_装饰器
查看>>
设计模式12_外观模式
查看>>
设计模式13_享元模式
查看>>
设计模式14_组合结构
查看>>
设计模式15_模板
查看>>
海龟交易法则01_玩风险的交易者
查看>>
CTA策略02_boll
查看>>
vnpy通过jqdatasdk初始化实时数据及历史数据下载
查看>>
设计模式19_状态
查看>>
设计模式20_观察者
查看>>
vnpy学习10_常见坑
查看>>