1. copy // 容器内指定范围的元素拷贝到另一容器中
2. replace // 将容器内指定范围的旧元素修改为新元素
3. replace_if // 容器内指定范围满足条件的元素替换为新元素
4. swap // 互换两个容器的元素
1. copy // 容器内指定范围的元素拷贝到另一容器中
// 常用拷贝和替换算法:copy /* 功能描述: 容器内指定范围的元素拷贝到另一容器中 函数原型: copy(iterator beg, iterator end, iterator dest); // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置 // beg 开始迭代器 // end 结束迭代器 // dest 目标起始迭代器 */ #include <bits/stdc++.h> using namespace std; void print1(int val) { cout << val << " "; } void test01() { vector<int> v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } vector<int> v2; v2.resize(v1.size()); // v2要提前开辟空间!!!!! copy(v1.begin(), v1.end(), v2.begin()); 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 5 6 7 8 9 cout << endl; } int main() { test01(); } /* 总结: 利用copy算法在拷贝时,目标容器记得提前开辟空间 */
2. replace // 将容器内指定范围的旧元素修改为新元素
// 常用拷贝和替换算法:replace /* 功能描述: 将容器内指定范围的'所有'旧元素修改为新元素 函数原型: replace(iterator beg, iterator end, oldvalue, newvalue); // 将区间内旧元素 替换成 新元素 // beg 开始迭代器 // end 结束迭代器 // oldvalue 旧元素 // newvalue 新元素 */ #include <bits/stdc++.h> using namespace std; void print1(int val) { cout << val << " "; } void test01() { vector<int> v1; for (int i = 0; i < 5; i++) { v1.push_back(i); } for (int i = 1; i < 6; i++) { v1.push_back(i); } for_each(v1.begin(), v1.end(), print1); // 0 1 2 3 4 1 2 3 4 5 cout << endl; replace(v1.begin(), v1.end(), 5, 111); for_each(v1.begin(), v1.end(), print1); // 0 1 2 3 4 1 2 3 4 111 cout << endl; replace(v1.begin(), v1.end(), 2, 2222); for_each(v1.begin(), v1.end(), print1); // 0 1 2222 3 4 1 2222 3 4 111 cout << endl; } int main() { test01(); } /* 总结: replace会替换区间内满足条件的元素 */
3. replace_if // 容器内指定范围满足条件的元素替换为新元素
// 常用拷贝和替换算法:replace_if /* 功能描述: 将区间内满足条件的元素,替换成指定元素 函数原型: replace_if(iterator beg, iterator end, _pred, newvalue); // 按条件替换元素,满足条件的替换成指定元素 // beg 开始迭代器 // end 结束迭代器 // _pred 谓词 // newvalue 替换的新元素 */ #include <bits/stdc++.h> using namespace std; void print1(int val) { cout << val << " "; } class greater3 { public: bool operator()(int val) { return val > 3; } }; void test01() { vector<int> v1; for (int i = 0; i < 5; i++) { v1.push_back(i); } for (int i = 1; i < 6; i++) { v1.push_back(i); } for_each(v1.begin(), v1.end(), print1); // 0 1 2 3 4 1 2 3 4 5 cout << endl; replace_if(v1.begin(), v1.end(), greater3(), 111); // 大于3的替换为111 for_each(v1.begin(), v1.end(), print1); // 0 1 2 3 111 1 2 3 111 111 cout << endl; } int main() { test01(); } /* 总结: replace_if按条件查找,可以利用仿函数灵活筛选满足的条件 */
4. swap // 互换两个容器的元素
// 常用拷贝和替换算法:swap /* 功能描述: 互换两个'同种类型'容器的元素 函数原型: swap(container c1, container c2); // 互换两个容器的元素 // c1容器1 // c2容器2 */ #include <bits/stdc++.h> using namespace std; void print1(int val) { cout << val << " "; } void test01() { vector<int> v1; vector<int> v2; for (int i = 0; i < 5; i++) { v1.push_back(i); } for (int i = 6; i < 10; i++) { v2.push_back(i); } for_each(v1.begin(), v1.end(), print1); // 0 1 2 3 4 cout << endl; for_each(v2.begin(), v2.end(), print1); // 6 7 8 9 cout << endl; swap(v1, v2); for_each(v1.begin(), v1.end(), print1); // 6 7 8 9 cout << endl; for_each(v2.begin(), v2.end(), print1); // 0 1 2 3 4 cout << endl; } int main() { test01(); } /* 总结: swap交换容器时,注意交换的容器要同种类型 */