这里写目录标题
- STL初始
- STL诞生
- STL基本概念
- STL六大组件
- STL中的容器、算法、迭代器
- 容器算法迭代器初识
- vector存放内置数据类型
- vector存放自定义数据类型
- vector中嵌套vector
- string容器
- 构造函数
- 赋值操作
- 字符串拼接
- 字符串查找与替换
- 字符串比较
- 单字符存取(读写)
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();
string容器
构造函数
string实际上是一个系统类 其有一个成员属性是char* 所以 string本质上仍然是char * string类中提供了许多成员函数 供我们使用
赋值操作
等号的赋值方法是比较常用的 可以直接字符常量赋值 或者一个字符串赋值给另一个字符串 或者一个字符 也可以赋值给字符串
字符串拼接
char* (“helloWorld”)或者string(s) 可以分别称为c形式 与 c++形式 在选择性字符拼接时 c形式只能选前几个 c++形式可以指定从哪个开始 数量几个
注意 函数返回值是引用类型 那么返回的是变量的别名 实际上就是变量 所以s1被拼接后 内容就保存到s1里面了 会跟随者下一次拼接 如下图
字符串查找与替换
里面要注意 替换可以以char* 或者string 可以分别称为c形式 与 c++形式
补充:正常类对象 即“不是常对象” 仍然可以调用成员函数里的常函数
在主串中查找子串 找到了返回子串第一个字符在主串中的位置下标 找不到返回-1
注意 rfind是从右开始查找子串 并返回第一个找到的下标 find是从左开始 返回第一个找到的下标
字符串比较
单字符存取(读写)
读:就是只能获取输出
写:就是可以修改