常用的拷贝和替换算法:
copy(); 复制序列
copy_backward(); 与copy相同,不过元素是以相反顺序被拷贝。
replace(); 将指定范围内所有等于 old_value 的元素都用 新的值 代替。
replace_if(); 将指定范围内所有操作结果为true的元素用新值代替。
swap(); 交换存储在两个对象中的值。
copy()函数
将容器内元素拷贝到另一个容器中
copy(begin1, end1, begin2);
replace()函数
将容器指定范围内指定元素值替换成新值
replace(begin, end, old_value, new_value):
replace_if()函数
将指定范围内所有操作结果位true的元素替换为新值。
replace_if(degin, end, 谓词, new_value);
swap()函数
交换两个容器的内容(所有的元素)。
swap(容器1, 容器2);
下面是练习演示代码:
#include <iostream> #include <algorithm> #include <vector> #include <functional> using namespace std; void show(int &value) { cout << value << " "; } void test_copy() { vector<int> vec1; vector<int> vec2; for (int i = 0; i < 10; i++) { vec1.push_back(rand() % 20); } for_each(vec1.begin(), vec1.end(), show); cout << endl; vec2.resize(vec1.size()); copy(vec1.begin(), vec1.end(), vec2.begin()); for_each(vec2.begin(), vec2.end(), show); cout << endl; } void test_replace() { vector<int> vec1; for (int i = 0; i < 10; i++) { vec1.push_back(rand() % 20); } vec1.push_back(3); vec1.push_back(3); vec1.push_back(3); replace(vec1.begin(), vec1.end(), 3, 33); for_each(vec1.begin(), vec1.end(), show); cout << endl; //将所有大于3的元素换成33 replace_if(vec1.begin(), vec1.end(), bind2nd(greater<int>(), 3), 33); for_each(vec1.begin(), vec1.end(), show); cout << endl; } void test_Swap() { //swap 不需要开辟空间 vector<int> vec1; vector<int> vec2; for (int i = 0; i < 10; i++) { vec1.push_back(rand() % 20); vec2.push_back(rand() % 30); } for_each(vec1.begin(), vec1.end(), show); cout << endl; for_each(vec2.begin(), vec2.end(), show); cout << endl; swap(vec1, vec2); for_each(vec1.begin(), vec1.end(), show); cout << endl; for_each(vec2.begin(), vec2.end(), show); cout << endl; } int main(void) { //test_copy(); //test_replace(); test_Swap(); return 0; }