- 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 }
运行结果:
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)
标签:P185,容器,begin,STL,back,C++,Person,vector,push From: https://www.cnblogs.com/wjjgame/p/17331109.html