目录
一、常用的拷贝和替换算法
- 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;
}