C++黑马程序员——P197-200. vector容器 构造函数,赋值,容量和大小,插入和删除
- P197. vector容器——构造函数
- P198. vector容器——赋值操作
- P199. vector容器——容量和大小
- P200. vector容器——插入和删除
- P197. vector容器 构造函数
vector基本概念
功能:vector数据结构和数组非常相似,也称为单端数组
vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展
动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
vector容器的迭代器是支持随机访问(跳跃的访问)的迭代器
(第二三四中方式,上面没给全,应该是 vector<数据类型>变量名(参数),参考一下下面的代码部分)
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4
5 //打印函数
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 //vector容器 构造函数
15 void test01()
16 {
17 //1. 默认构造 无参构造
18 vector<int>v;
19 for (int i = 0; i < 10; i++)
20 {
21 v.push_back(i);
22 }
23 PrintVector(v);
24
25 //2. 通过区间方式进行构造
26 vector<int>v2(v.begin(), v.end());
27 PrintVector(v2);
28
29 //3. n个elem方式构造
30 vector<int>v3(10, 100); //10个100
31 PrintVector(v3);
32
33 //4. 拷贝构造
34 vector<int>v4(v3);
35 PrintVector(v4);
36 }
37
38 int main() {
39
40 test01();
41 return 0;
42 }
运行结果:
- P198. vector容器 赋值操作
上面第一条,重载等号操作符,C++已经重载好了,直接用“=”就可以
第二条,注意区间的前闭后开
示例:
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 void test01()
17 {
18 vector<int>v1;
19 //把0-9装到v1
20 for (int i = 0; i < 10; i++)
21 {
22 v1.push_back(i);
23 }
24 PrintVector(v1);
25
26 //赋值1. operator =
27 vector<int>v2;
28 v2 = v1;
29 PrintVector(v2);
30
31 //赋值2. assign
32 vector<int>v3;
33 v3.assign(v1.begin(), v1.end());
34 PrintVector(v3);
35
36 //赋值3. n个elem的方式
37 vector<int>v4;
38 v4.assign(10, 100); //10个100
39 PrintVector(v4);
40 }
41
42 int main()
43 {
44 test01();
45 return 0;
46 }
运行结果:
- P199. vector容器 容量和大小
注意,上面的capacity()输出的不是当前容器的字节数,而是能够容纳多少<>里的东西;size()返回的则就是容器当前已经容纳了多少元素
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 void test01()
17 {
18 vector<int>v1;
19 for (int i = 0; i < 10; i++)
20 {
21 v1.push_back(i);
22 }
23 PrintVector(v1);
24
25 if (v1.empty()) //empty()返回值为bool值,如果返回true代表v1为空,如果返回false代表v1非空
26 {
27 cout << "v1为空" << endl;
28 }
29 else
30 {
31 cout << "v1非空" << endl;
32 cout << "v1的容量为:" << v1.capacity() << endl;
33 cout << "v1的大小为:" << v1.size() << endl;
34 }
35
36 //重新指定大小
37 v1.resize(15);
38 PrintVector(v1); //如果重新指定的比原来长了,默认用0填充新的位置
39 v1.resize(16, 100); //利用重载的版本,可以修改默认的填充值(参数2,这里改为100)
40 PrintVector(v1);
41 v1.resize(5); //如果重新指定的比原来短了,超出部分会删除掉
42 PrintVector(v1);
43
44 cout << "v1的容量为:" << v1.capacity() << endl;
45 cout << "v1的大小为:" << v1.size() << endl;
46 }
47
48 int main()
49 {
50 test01();
51 return 0;
52 }
运行结果:
第一次打印的“v1的容量为:13”,而我们只往vector中填充了10个int,多出来的3个是编辑器帮我们预留的;后面的“19”也是一样的道理。
- P200. vector容器 插入和删除
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 void test01()
17 {
18 vector<int>v1;
19 //尾插
20 v1.push_back(10);
21 v1.push_back(20);
22 v1.push_back(30);
23 v1.push_back(40);
24 v1.push_back(50);
25 //遍历
26 PrintVector(v1);
27 //尾删
28 v1.pop_back();
29 PrintVector(v1);
30 //插入
31 v1.insert(v1.begin(), 100); //第一个参数是迭代器
32 PrintVector(v1);
33 v1.insert(v1.begin(), 2, 1000);
34 PrintVector(v1);
35 //删除
36 v1.erase(v1.begin());
37 PrintVector(v1);
38 //清空
39 //v1.erase(v1.begin(), v1.end());
40 v1.clear();
41 PrintVector(v1); //只输出了一个换行
42
43 }
44
45 int main()
46 {
47 test01();
48 return 0;
49 }
运行结果:
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)
分类:
C++学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具