这里写目录标题
- STL初始
- STL诞生
- STL基本概念
- STL六大组件
- STL中的容器、算法、迭代器
- 容器算法迭代器初识
- vector存放内置数据类型
- vector存放自定义数据类型
- vector中嵌套vector
- 二级目录
- 二级目录
- 二级目录
- 二级目录
- 二级目录
- 二级目录
- 二级目录
- 二级目录
STL初始
STL诞生
STL基本概念
STL六大组件
STL中的容器、算法、迭代器
容器算法迭代器初识
vector存放内置数据类型
vector是一个系统内置模板类 使用时要包含vector头文件
首先创建一个容器对象 并通过模板参数指定数据类型(当指定类型为int时 就可以认为是一个数组)
之后 调用该容器的成员函数 push_back(数据) 可以将数据以尾插法的形式插入容器中
但是想要访问容器中的元素 还需要一个迭代器 每个容器都有自己的迭代器(vector:: 就意为当前容器专属的迭代器),迭代器用来遍历容器中的元素
vector::iterator pBegin = v.begin();
迭代器数据类型 迭代器变量 容器成员函数-用来返回指向容器第一个元素的迭代器
vector::iterator pEnd = v.end();
迭代器数据类型 迭代器变量 容器成员函数-用来返回指向容器最后一个元素的下一位的迭代器
如下图:(可以将迭代器变量视为指针来使用)
接下来是遍历容器中的元素:
第一种类似于用两个指针来进行遍历 但是只递增一个指针
第二种方式 利用for循环 把创建迭代器与循环结合起来 简化代码
第三种方式 使用STL库里的算法 注意要包含头文件“algorithm”
for_each(首元素迭代器,尾元素后一个元素迭代器,每个元素要经历的函数的函数名(相当于一个函数体 每个元素当做参数))
例如:定义 void MyPrint(int val){
cout<<val<<endl;
}
那么for_each就是一个遍历输出
下面是for_each的源码
vector存放自定义数据类型
it是指向容器元素的指针 所以 *it就是模板参数列表中的参数 如下图 it是Person星 而星it就是Person
*it就是Person星 因为<>里面是Person星
vector中嵌套vector
对于循环遍历 外层循环每次都可以获取到一个大元素 该大元素就是vector类型的容器 所以*it也就是vector容器对象 依次指向前面插入的v1,v2,v3,v4。仍然是一个容器对象 并且可以调用其成员函数
所以也就有了内层循环中的变量 以及(*it).begin();