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 }

 

posted @ 2021-05-14 09:11  yub4by  阅读(95)  评论(0编辑  收藏  举报