C++的面向对象和泛型编程思想,目的就是复用性的提升
为了建立数据结构和算法的一套标准,诞生了STL
STL(Standard Template Library, 标准模板库)
STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator)
容器和算法之间通过迭代器进行无缝连接
STL几乎所有的代码都采用了模板类或者模板函数
STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
迭代器使用非常类似于指针,初级阶段可以先理解迭代器为指针。
算法要通过迭代器才能访问容器中的元素
常用的容器中迭代器种类为双向迭代器,和随机访问迭代器
STL中最常用的容器为Vector,可以理解为数组
容器:vector
算法:for_each
迭代器:vector
- void myPrint(int num)
- {
- cout << num << endl;
- }
- void test01()
- {
- //创建vector容器对象,且通过模板参数指定容器中存放的数据的类型
- vector<int> array;
- //向容器中放数据
- array.push_back(10);
- array.push_back(20);
- array.push_back(30);
- array.push_back(40);
- //每个容器都有自己的迭代器,迭代器用来遍历容器中的元素
- //array.begin()返回迭代器,这个迭代器指向容器中第一个数据
- //array.end()返回迭代器,这个迭代器指向容器元素的最后一个元素的下一个位置
- //vector<int>::iterator 拿到vector<int>这种容器的迭代器类型
- //第一种遍历方式
- vector<int>::iterator begin = array.begin();
- vector<int>::iterator end = array.end();
- while (begin != end)
- {
- cout << *begin << endl;
- begin++;
- }
- //第二种遍历方式
- for (vector<int>::iterator i = array.begin(); i != array.end(); ++i)
- {
- cout << *i << endl;
- }
- //第三种遍历方式,利用STL提供遍历算法
- //头文件algorithm
- for_each(array.begin(), array.end(), myPrint);
- }
- void test01()
- {
- vector<Person> v;
- v.push_back(Person("aaa", 11));
- v.push_back(Person("bbb", 23));
- v.push_back(Person("ccc", 34));
- v.push_back(Person("ddd", 24));
- v.push_back(Person("eee", 41));
- for (vector<Person>::iterator i = v.begin(); i != v.end(); ++i)
- {
- //cout << "姓名:" << i->m_Name << ",年龄:" << i->m_Age << endl;
- cout << "姓名:" << (*i).m_Name<< ",年龄:" << (*i).m_Age << endl;
- }
- }
- void test02()
- {
- vector<Person*> v;
- Person p1 = Person("aaa", 11);
- Person p2("bbb", 23);
- Person p3("ccc", 34);
- Person p4("ddd", 24);
- Person p5("eee", 31);
- v.push_back(&p1);
- v.push_back(&p2);
- v.push_back(&p3);
- v.push_back(&p4);
- v.push_back(&p5);
- for (vector<Person*>::iterator i = v.begin(); i != v.end(); ++i)
- {
- //cout << "姓名:" << i->m_Name << ",年龄:" << i->m_Age << endl;
- cout << "姓名:" << (*i)->m_Name << ",年龄:" << (*i)->m_Age << endl;
- }
- }
类似二维数组
- void test01()
- {
- vector<vector<int>> v;
- vector<int>v1;
- vector<int>v2;
- vector<int>v3;
- vector<int>v4;
- for (int i = 0; i < 4; ++i)
- {
- v1.push_back(i + 1);
- v2.push_back(i + 2);
- v3.push_back(i + 3);
- v4.push_back(i + 4);
- }
- //把小容器插入到大容器中
- v.push_back(v1);
- v.push_back(v2);
- v.push_back(v3);
- v.push_back(v4);
- //通过大容器,把所有数据遍历一遍
- for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); ++it)
- {
- // (*it) ---容器 vector<int>
- for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); ++vit)
- //for (vector<int>::iterator vit = it->begin(); vit != it->end(); ++vit)
- {
- cout <<*vit << " ";
- }
- cout << endl;
- }
- }