STL--常用的拷贝和替换算法

目录

一、常用的拷贝和替换算法

1. copy

 2. replace

 3. replace_if

 4. swap


一、常用的拷贝和替换算法

  • 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>
		#include<functional>  // 内建函数对象
		
		// 常用的拷贝和替换算法
		// copy
		void my_print(vector<int>&v)
		{
			for(vector<int>::iterator it=v.begin();it!=v.end();it++)
			{
				cout<<*it<<" ";
			}
			cout<<endl;
		}
		int main()
		{
			vector<int> v;
			for(int i=0;i<10;i++)
			{
				v.push_back(i);
			}
		
			vector<int> v1;
			// 把v中的数据拷贝到v1 中
			v1.resize(v.size());// 拷贝前要给目标容器开辟空间
			copy(v.begin(),v.end(),v1.begin());
			my_print(v);
			my_print(v1);
			return 0;
		}

 2. replace

  • replace(iterator  beg,  iterator  end,  oldvalue,  newvalue);
  • beg  起始迭代器
  • end   结束迭代器
  • oldvalue  旧元素
  • newvalue  新元素
		#include<iostream>
		using namespace std;
		#include<vector>
		#include<algorithm>
		#include<functional>  // 内建函数对象
		
		// 常用的拷贝和替换算法
		// replace  将容器内指定范围的数改为新的元素
		void my_print(vector<int>&v)
		{
			for(vector<int>::iterator it=v.begin();it!=v.end();it++)
			{
				cout<<*it<<" ";
			}
			cout<<endl;
		}
		int main()
		{
			vector<int> v;
			for(int i=0;i<10;i++)
			{
				for(int j=0;j<3;j++)
				{
					v.push_back(j);
				}
			}
			cout<<"替换前:"<<endl;
			my_print(v);
			cout<<"替换后:"<<endl;
			replace(v.begin(),v.end(),2,200); // 把所有的2都替换成200
			my_print(v);
			return 0;
		}

 3. replace_if

  • replace_if(iterator  beg,  iterator  end,  _Pred,  neavalue);
  • beg  起始迭代器
  • end   结束迭代器
  • _Pred  谓词
  • newvalue  替换的新的元素
		#include<iostream>
		using namespace std;
		#include<vector>
		#include<algorithm>
		#include<functional>  // 内建函数对象 
		
		// 常用的拷贝和替换算法
		// replace_if  按条件将容器内的数据修改为新的数据
		void my_print(vector<int>&v)
		{
			int num=0;
			for(vector<int>::iterator it=v.begin();it!=v.end();it++)
			{
				if(num==3){
					cout<<*it<<endl;
					num=0;
				}		
				else{
					cout<<*it<<" ";
					num++;
				}
			}
			cout<<endl;
		}
		
		class Replace
		{
		public:
			bool operator()(int val)
			{
				return val>2;
			}
		};
		int main()
		{
			vector<int> v;
			for(int i=0;i<5;i++)
			{
				for(int j=1;j<=4;j++)
				{
					v.push_back(j);
				}
			}
			cout<<"替换前:"<<endl;
			my_print(v);
			cout<<"替换后:"<<endl;
			replace_if(v.begin(),v.end(),Replace(),200); // 把所有大于2都替换成200
			my_print(v);
			return 0;
		}

 4. swap

  • swap(container  c1,  container  c2);
  • 两个参数分别为两个容器
  • 必须是两个相同种类的容器
		#include<iostream>
		using namespace std;
		#include<vector>
		#include<algorithm>
		#include<functional>  // 内建函数对象
		
		// 常用的拷贝和替换算法
		// swap 交换两个容器的元素
		void my_print(vector<int>&v)
		{
			for(vector<int>::iterator it=v.begin();it!=v.end();it++)
			{
				cout<<*it<<" ";
			}
			cout<<endl;
		}
		
		class Replace
		{
		public:
			bool operator()(int val)
			{
				return val>2;
			}
		};
		int main()
		{
		 	vector<int> v1;
			for(int i=0;i<10;i++)
			{
				v1.push_back(i);
			}
			vector<int>v2;
			for(int i=10;i>=0;i--)
			{
				v2.push_back(i);
			}
			cout<<"交换前:"<<endl;
			my_print(v1);
			my_print(v2);
			cout<<"交换后:"<<endl;
			swap(v1,v2);
			my_print(v1);
			my_print(v2);
			return 0;
		}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值