STL常用算法——拷贝和替换算法
1、copy()
copy()函数:将源容器内指定范围的元素拷贝到目的容器中
函数原型:
copy(iterator beg,iterator end,iterator dest);
参数说明:
- beg 开始迭代器
- end 结束迭代器
- dest 目标容器的起始迭代器
void myPrint(int val) {
cout << val << " ";
}
void test01() {
//有序的源容器
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i);
}
//目的容器
vector<int> v1;
//提前开辟空间
v1.resize(v.size());
copy(v.begin(), v.end(), v1.begin());
for_each(v1.begin(), v1.end(), myPrint);//0 1 2 3 4 5 6 7 8 9
cout << endl;
}
copy_n():从源容器中复制指定个数的元素到目的容器中
函数原型:
copy_n(iterator beg, n, iterator beg1);
参数说明:
- beg 源容器开始迭代器
- n 需要复制的元素的个数
- beg1 目的容器开始迭代器
void myPrint(int val) {
cout << val << " ";
}
void test01() {
vector<int> v;
//有序的容器
for (int i = 0; i < 10; i++) {
v.push_back(i);
}
vector<int> v2;
//目标容器,提前开辟空间
v2.resize(5);
copy_n(v.begin(), 5, v2.begin());
for_each(v2.begin(),v2.end(), myPrint);//0 1 2 3 4
cout << endl;
}
2、replace()
replace()函数:用新的值来替换容器内和给定值相匹配的元素
函数原型:
replace(iterator beg,iterator end,oldvalue,newvalue);
参数说明:
- beg 开始迭代器
- end 结束迭代器
- oldvalue 旧元素,被替换的值
- newvalue 新的值
void myPrint(int val) {
cout << val << " ";
}
void test01() {
vector<int> v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
cout << "替换前:" << endl;
for_each(v1.begin(), v1.end(), myPrint);//0 1 2 3 4 5 6 7 8 9
cout << endl;
cout << "替换后:" << endl;
replace(v1.begin(), v1.end(), 2, 100);
for_each(v1.begin(), v1.end(), myPrint);//0 1 100 3 4 5 6 7 8 9
cout << endl;
}
3、replace_if()
replace_if()函数:将容器区间内所有满足条件的元素替换成指定元素
函数原型:
replace_if(iterator beg,iterator end,_Pred,newvalue);
参数说明:
- beg 开始迭代器
- end 结束迭代器
- _Pred 谓词
- newvalue 替换的新元素
void myPrint(int val) {
cout << val << " ";
}
//函数对象
class MyCompare {
public:
bool operator()(int val) {
return val > 5;
}
};
void test01() {
vector<int> v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
//将大于5的替换成3
replace_if(v1.begin(), v1.end(), MyCompare(), 7);
for_each(v1.begin(), v1.end(), myPrint);//0 1 2 3 4 5 7 7 7 7
cout << endl;
}
4、swap()
swap()函数:交换两个容器中的元素
函数原型:
swap(container c1,container c2);
参数说明:
- c1 容器1
- c2 容器2
交换的容器必须是同种类型
void myPrint(int val) {
cout << val << " ";
}
void test01() {
vector<int> v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
vector<int> v2;
for (int i = 0; i < 10; i++) {
v2.push_back(i * 10);
}
swap(v1, v2);
cout << "替换后:" << endl;
for_each(v1.begin(), v1.end(), myPrint);//0 10 20 30 40 50 60 70 80 90
cout << endl;
for_each(v2.begin(), v2.end(), myPrint);//0 1 2 3 4 5 6 7 8 9
cout << endl;
}