C++黑马程序员——P185-188. STL初识
- P185. STL初识——STL的基本概念
- P186. STL初识——vector存放内置数据类型
- P187. STL初识——vector存放自定义数据类型
- P188. STL初识——容器嵌套容器
- P185. STL的基本概念
STL,Standard Template Library,标准模板库
STL:为了提高代码的复用性,提供一套标准的数据结构和算法
STL从广义上分为:容器(container),算法(algorithm),迭代器(iterator)
容器和算法之间通过迭代器进行无缝连接
容器:
算法:
迭代器:
- P186. vector存放内置数据类型
此节主要内容:
先看个例子:
1 #include <iostream>
2 using namespace std;
3 #include <vector>
4
5 //vector容器存放内置数据类型
6 void test01()
7 {
8 //创建了一个vector容器(先理解为一个数组)
9 vector<int>v; //int为数据类型,v为容器变量名
10 //向容器中插入数据
11 v.push_back(10); //push_back 尾插
12 v.push_back(20);
13 v.push_back(30);
14 v.push_back(40);
15 //通过迭代器访问容器中的数据
16 //迭代器暂时理解为指针
17 vector<int>::iterator itBegin = v.begin(); //起始迭代器 指向容器中第一个元素
18 vector<int>::iterator itEnd = v.end(); //结束迭代器 指向容器中最后一个元素的下一个位置
19 while (itBegin != itEnd)
20 {
21 cout << *itBegin << endl;
22 itBegin++;
23 }
24 }
25
26 int main()
27 {
28 test01();
29 return 0;
30 }
运行结果:
第二种遍历方式:
1 //第二种遍历方式
2 for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
3 {
4 cout << *it << endl;
5 }
运行结果 同上
第三种遍历方式:
1 ...
2 #include <algorithm>
3
4 void MyPrint(int val)
5 {
6 cout << val << endl;
7 }
8
9 //vector容器存放内置数据类型
10 void test01()
11 {
12 //创建了一个vector容器(先理解为一个数组)
13 vector<int>v;
14 //向容器中插入数据
15 v.push_back(10);
16 v.push_back(20);
17 v.push_back(30);
18 v.push_back(40);
19
20 //第三种遍历方式
21 for_each(v.begin(), v.end(), MyPrint);
22 }
23 ...
运行结果 同上
for_each模板中的关键部分:
1 for (; _UFirst != _ULast; ++_UFirst) {
2 _Func(*_UFirst);
3 }
for_each(v.begin(), v.end(), MyPrint); 就是当v.begin() != v.end(),就执行MyPrint(*v.begin()),并且v.begin()++;
- P187. vector存放自定义数据类型
此节主要内容:vector中存放自定义数据类型,并打印输出
1 #include <iostream>
2 using namespace std;
3 #include <vector>
4 #include <string>
5
6 //vector中存放自定义数据类型
7 class Person
8 {
9 public:
10 Person(string name, int age)
11 {
12 this->m_Name = name;
13 this->m_Age = age;
14 }
15 string m_Name;
16 int m_Age;
17 };
18
19 void test01()
20 {
21 //创建一个Person的容器
22 vector<Person>v;
23
24 Person p1("aaa", 10);
25 Person p2("bbb", 20);
26 Person p3("ccc", 30);
27 Person p4("ddd", 40);
28 Person p5("eee", 50);
29
30 //向容器中添加数据
31 v.push_back(p1);
32 v.push_back(p2);
33 v.push_back(p3);
34 v.push_back(p4);
35 v.push_back(p5);
36
37 //遍历容器中的数据
38 for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
39 {
40 cout << "姓名:" << (*it).m_Name << " 年龄:" << (*it).m_Age << endl;
41 //或者
42 //cout << it->m_Name << "\t" << it->m_Age << endl; //it可以看成Person的指针
43 }
44
45 }
46
47 //存放自定义数据类型 指针
48 void test02()
49 {
50 vector<Person*>v;
51
52 Person p1("aaa", 10);
53 Person p2("bbb", 20);
54 Person p3("ccc", 30);
55 Person p4("ddd", 40);
56 Person p5("eee", 50);
57
58 //向容器中添加数据
59 v.push_back(&p1); //&取址
60 v.push_back(&p2);
61 v.push_back(&p3);
62 v.push_back(&p4);
63 v.push_back(&p5);
64
65 //遍历容器中的数据
66 for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++)
67 {
68 cout << "02姓名:" << (**it).m_Name << " 年龄:" << (**it).m_Age << endl; //两次解引用
69 //或者
70 //cout << (*it)->m_Name << "\t" << (*it)->m_Age << endl; //it相当于Person*的指针,(*it)(解引用)相当于Person*(简单来说,就是看vector后的“<>”中的内容)
71 }
72 }
73
74 int main()
75 {
76 test01();
77 test02();
78 return 0;
79 }
运行结果:
- P188. 容器嵌套容器
此节主要内容:容器中嵌套容器,将所有数据进行遍历输出
1 #include <iostream>
2 #include <vector>
3 using namespace std;
4
5 //容器嵌套容器
6 void test01()
7 {
8 vector<vector<int>>v;
9 //创建小容器
10 vector<int>v1;
11 vector<int>v2;
12 vector<int>v3;
13 vector<int>v4;
14 //向小容器中添加数据
15 for (int i = 0; i < 4; i++)
16 {
17 v1.push_back(i + 1);
18 v2.push_back(i + 2);
19 v3.push_back(i + 3);
20 v4.push_back(i + 4);
21 }
22 //将小容器插入到大容器中
23 v.push_back(v1);
24 v.push_back(v2);
25 v.push_back(v3);
26 v.push_back(v4);
27
28 //通过大容器,把所有数据遍历一遍
29 for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
30 {
31 //(*it)——vector<int>
32 for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
33 {
34 cout << *vit << " ";
35 }
36 cout << endl;
37 }
38 }
39
40 int main() {
41
42 test01();
43 return 0;
44 }
运行结果:
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」