C++黑马程序员——P201-203. vector容器 数据存取,互换空间,预留空间
- P201. vector容器——数据存取
- P202. vector容器——互换容器
- P203. vector容器——预留空间
- P201. vector容器 数据存取
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4
15 //vector容器 数据存取
16 void test01()
17 {
18 vector<int>v1;
19 for (int i = 0; i < 10; i++)
20 {
21 v1.push_back(i);
22 }
23
24 //用中括号[]的方式访问vector中的元素
25 for (int i = 0; i < v1.size(); i++)
26 {
27 cout << v1[i] << " ";
28 }
29 cout << endl;
30
31 //利用at方式访问元素
32 for (int i = 0; i < v1.size(); i++)
33 {
34 cout << v1.at(i) << " ";
35 }
36 cout << endl;
37
38 //获取第一个元素
39 cout << "第一个元素为:" << v1.front() << endl;
40 //获取最后一个元素
41 cout << "最后一个元素为:" << v1.back() << endl;
42 }
43
44 int main()
45 {
46 test01();
47 return 0;
48 }
运行结果:
- P202. vector容器 互换容器
示例1:
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4
5 //打印vector的函数
6 void PrintVector(vector<int>& v)
7 {
8 for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
9 {
10 cout << *it << " ";
11 }
12 cout << endl;
13 }
14
15 //vector容器互换
16 //1. 基本使用
17 void test01()
18 {
19 vector<int>v1;
20 for (int i = 0; i < 10; i++)
21 {
22 v1.push_back(i);
23 }
24 cout << "交换前:" << endl;
25 PrintVector(v1);
26
27 vector<int>v2;
28 for (int i = 10; i > 0; i--)
29 {
30 v2.push_back(i);
31 }
32 PrintVector(v2);
33
34 v1.swap(v2);
35 cout << "交换后:" << endl;
36 PrintVector(v1);
37 PrintVector(v2);
38 }
39
40 int main()
41 {
42 test01();
43 return 0;
44 }
运行结果:
示例2:
1 //2. 实际用途
2 //巧用swap可以收缩内存空间
3 void test02()
4 {
5 vector<int>v;
6 for (int i = 0; i < 100000; i++)
7 {
8 v.push_back(i);
9 }
10
11 cout << "v的容量为:" << v.capacity() << endl;
12 cout << "v的大小为:" << v.size() << endl;
13
14 v.resize(3);
15 cout << "v的容量为:" << v.capacity() << endl; //容量不会变小
16 cout << "v的大小为:" << v.size() << endl; //size会变
17
18 //巧用swap收缩内存
19 vector<int>(v).swap(v);
20 cout << "v的容量为:" << v.capacity() << endl;
21 cout << "v的大小为:" << v.size() << endl;
22 }
23
24
25 int main()
26 {
27 test02();
28 return 0;
29 }
运行结果:
图解:
总结:swap可以使两个容器互换,可以达到使用的收缩内存效果。
- P203. vector容器 预留空间
不使用reserve时,统计内存开辟的次数:
1 //vector容器 预留空间
2 int num = 0; //内存区域变更次数
3 int* p = NULL; //用于指向vector的首地址
4 void test01()
5 {
6 vector<int>v;
7 for (int i = 0; i < 100000; i++)
8 {
9 v.push_back(i);
10 //计算动态分配时变更了几次内存的区域
11 if (p != &v[0])
12 {
13 p = &v[0];
14 num++;
15 }
16 }
17 cout << "num = " << num << endl;
18 }
19
20 int main()
21 {
22 test01();
23 return 0;
24 }
运行结果:
使用reserve预留内存空间:
1 //vector容器 预留空间
2 int num = 0; //内存区域变更次数
3 int* p = NULL; //用于指向vector的首地址
4 void test01()
5 {
6 vector<int>v;
7 v.reserve(100000);
8 cout << "v.capacity() = " << v.capacity() << endl;
9 for (int i = 0; i < 100000; i++)
10 {
11 v.push_back(i);
12 //计算动态分配时变更了几次内存的区域
13 if (p != &v[0])
14 {
15 p = &v[0];
16 num++;
17 }
18 }
19 cout << "num = " << num << endl;
20 }
21
22 int main()
23 {
24 test01();
25 return 0;
26 }
运行结果:
总结:如果数据量较大,可以一开始利用reserve预留空间。
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)