18.4.1【STL常用拷贝和替换算法copy、swap】
1 #include<iostream> 2 #include<cstdlib> 3 using namespace std; 4 #include<algorithm> 5 #include<vector> 6 7 8 /* 9 5.4 常用拷贝和替换算法 10 copy // 容器内指定范围的元素拷贝到另一容器中 11 replace // 将容器内指定范围的旧元素修改为新元素 12 replace_if // 容器内指定范围满足条件的元素替换为新元素 13 swap // 互换两个容器的元素 14 15 5.4.1 copy 16 容器内指定范围的元素拷贝到另一容器中 17 copy(iterator beg, iterator end, iterator dest); 18 // 按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置 19 // beg 开始迭代器 20 // end 结束迭代器 21 // dest 目标起始迭代器 22 利用copy算法在拷贝时,目标容器记得提前开辟空间 23 24 5.4.4 swap 25 互换两个容器的元素 26 swap(container c1, container c2); 27 // 互换两个容器的元素 28 // c1容器1 29 // c2容器2 30 swap交换容器时,注意交换的容器要同种类型 31 */ 32 33 34 void myprint(int val) 35 { 36 cout << val << " "; 37 } 38 39 40 void test541() 41 { 42 vector<int> v1; 43 for(int i=0; i<10; i++) 44 { 45 v1.push_back(i); 46 } 47 48 vector<int> v2; 49 v2.resize(v1.size()); //重点难点,不提前开辟空间会报错 50 51 copy(v1.begin(), v1.end(), v2.begin()); //效果同=赋值 52 53 for_each(v2.begin(), v2.end(), myprint); 54 cout << endl; 55 } 56 57 58 void test544() 59 { 60 vector<int> v1; 61 vector<int> v2; 62 for(int i=0; i<10; i++) 63 { 64 v1.push_back(i); 65 v2.push_back(i*100); 66 } 67 68 cout << "互换前:" << endl; 69 for_each(v1.begin(), v1.end(), myprint); 70 cout << endl; 71 for_each(v2.begin(), v2.end(), myprint); 72 cout << endl; 73 74 swap(v1, v2); 75 76 cout << "互换后:" << endl; 77 for_each(v1.begin(), v1.end(), myprint); 78 cout << endl; 79 for_each(v2.begin(), v2.end(), myprint); 80 cout << endl; 81 } 82 83 84 int main() 85 { 86 test541(); 87 test544(); 88 89 system("pause"); 90 return 0; 91 }