C++的 面向对象和 泛型编程思想,目的就是 复用性的提升
为了建立数据结构和算法的一套标准,诞生了STL。
STL基本概念
- STL(standard Template Library,标准模板库)
- STL从广义上分为:容器(container) 算法(algorithm)迭代器(iterator)
- 容器和算法之间通过迭代器进行无缝连接
- STL几乎所有的代码都采用了模板或者模板函数
STL六大组件
STL六大组件:容器,算法,迭代器,仿函数,适配器,空间配置器。。
- 容器:各种数据结构,如vector,list,deque,set,map等,用来存放数据。
- 算法:各种常用算法,如sort,find,copy,for_each等
- 迭代器:扮演了容器和算法之间的胶合剂
- 仿函数
- 适配器:一种用来修饰容器或者仿函数或者迭代器接口的东西
- 空间适配器:负责空间的配置和管理
容器算法迭代器初识
vector存放内置数据类型
容器:vector 可以理解为数组
算法:for_each 可以研究一下源码
迭代器:vector::iterator 可以当作指针使用
for_each(v.begin(), v.end(), myprit);//最后是一个函数名
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>//标准算法的头文件
void myprit(int val) {
cout << val << endl;
}
void test01() {
vector<int> v;//定义了一个int类型的容器V;
//向容器中插入数据
v.push_back(10);//尾部插入
v.push_back(20);
//通过迭代器访问容器中的数据
vector<int>::iterator itBegin = v.begin();//起始迭代器,指向容器中的第一个元素
vector<int>::iterator itEnd = v.end();//结束迭代器,指向最后一个元素的下一个位置
//遍历
while (itBegin != itEnd) {
cout << *itBegin << endl;
itBegin++;
}
//第二种遍历方式--常用
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it<< endl;
}
//第三种使用自带的遍历算法
for_each(v.begin(), v.end(), myprit);
}
vector存放自定义数据类型
vector<int> v;变成vector<Person> v;
class Person {
public:
Person(string name, int age) {
this->m_Age = age;
this->m_Name = name;
}
string m_Name;
int m_Age;
};
//自定义数据类型
void test02() {
vector<Person> v;
Person p1("aaaa",90);
Person p2("bbb",70);
v.push_back(p1);//尾部插入
v.push_back(p2);
//遍历
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
cout << "年龄" <<(*it).m_Age<< endl;
cout << "姓名" <<it->m_Name<< endl;
}
}
vector嵌套容器
vector <vector<int>> v;