C++提高编程 5 STL -常用算法(拷贝替换算法)
5.4 常用拷贝和替换算法
算法简介:
copy //容器内指定范围的元素拷贝到另一个容器中
replace //将容器内指定范围的旧元素修改为新元素
replace_if //容器内指定范围满足条件的元素替换为新元素
swap //互换两个容器的元素
5.4.1 copy //容器内指定范围的元素拷贝到另一个容器中
函数原型:copy(iterator beg, iterator end,iterator dest);
//按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
#include<iostream> using namespace std; #include<vector> #include<algorithm> //常用拷贝和替换算法 copy void print1(int val) { cout << val << " "; } void test1() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } vector<int>v2; v2.resize(v1.size()); copy(v1.begin(), v1.end(), v2.begin()); for_each(v2.begin(), v2.end(), print1); //0 1 2 3 4 5 6 7 8 9 cout << endl; } int main() { test1(); system("pause"); return 0; }
5.4.2 replace //将容器内指定范围的旧元素修改为新元素
函数原型:replace(iterator beg, iterator end,oldvalue,newvalue);
//beg(end):开始(结束)迭代器 oldvalue(newvalue):旧(新)元素
#include<iostream> using namespace std; #include<vector> #include<algorithm> //常用拷贝和替换算法 replace //普通函数 //void print1(int val) //{ // cout << val << " "; //} //仿函数 class print1 { public: void operator()(int val) { cout << val << " "; } }; void test1() { vector<int>v1; v1.push_back(20); v1.push_back(10); v1.push_back(20); v1.push_back(30); v1.push_back(40); v1.push_back(50); v1.push_back(20); v1.push_back(50); v1.push_back(20); cout << "替换前:"; for_each(v1.begin(), v1.end(), print1()); //替换前:20 10 20 30 40 50 20 50 20 cout << endl; cout << "替换后:"; replace(v1.begin(), v1.end(), 20, 2000); for_each(v1.begin(), v1.end(), print1()); //替换后:2000 10 2000 30 40 50 2000 50 2000 cout << endl; } int main() { test1(); system("pause"); return 0; }
5.4.3 replace_if //将区间内满足条件的元素,替换为新元素
函数原型:replace_if(iterator beg, iterator end, _pred, newvalue);
//_pred 谓词(返回bool类型) newvalue替换的新元素
#include<iostream> using namespace std; #include<vector> #include<algorithm> //常用拷贝和替换算法 replace_if //普通函数 //void print1(int val) //{ // cout << val << " "; //} //仿函数 class print1 { public: void operator()(int val) { cout << val << " "; } }; class Greater { public: bool operator()(int val) { return val >= 30; } }; void test1() { vector<int>v1; v1.push_back(20); v1.push_back(10); v1.push_back(20); v1.push_back(30); v1.push_back(40); v1.push_back(50); v1.push_back(20); v1.push_back(50); v1.push_back(20); //将大于等于30的数 替换为3000 cout << "替换前:"; for_each(v1.begin(), v1.end(), print1()); //替换前:20 10 20 30 40 50 20 50 20 cout << endl; cout << "替换后:"; replace_if(v1.begin(), v1.end(), Greater(), 3000); for_each(v1.begin(), v1.end(), print1()); //替换后:20 10 20 3000 3000 3000 20 3000 20 cout << endl; } int main() { test1(); system("pause"); return 0; }
5.4.4 swap //互换两个容器元素
函数原型:swap( container c1, container c2 ); //c1容器1,c2容器2 c1和c2应为同种类型容器
#include<iostream> using namespace std; #include<vector> #include<algorithm> //常用拷贝和替换算法 swap //普通函数 void print1(int val) { cout << val << " "; } //仿函数 //class print1 //{ //public: // void operator()(int val) // { // cout << val << " "; // } //}; void test1() { vector<int>v1; vector<int>v2; for (int i = 0; i < 10; i++) { v1.push_back(i); } for (int j = 0; j < 5; j++) { v2.push_back(j); } cout << "交换前:" << endl; for_each(v1.begin(), v1.end(), print1); //0 1 2 3 4 5 6 7 8 9 cout << endl; for_each(v2.begin(), v2.end(), print1); //0 1 2 3 4 cout << endl; cout << "----------------------" << endl; cout << "交换后:" << endl; swap(v1, v2); for_each(v1.begin(), v1.end(), print1); //0 1 2 3 4 cout << endl; for_each(v2.begin(), v2.end(), print1); //0 1 2 3 4 5 6 7 8 9 cout << endl; } int main() { test1(); system("pause"); return 0; }
分类:
C++学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构