1、STL基本概念
standard template library,标准模板库,是由惠普实验室开发的一系列软件的统称。STL广义上分为容器container、算法algorithm、迭代器iterator,容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。
在c++标准中,STL被组织成一下13个头文件
<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<numeric>、<queue>、<set>、<stack>、<utility>
使用STL的优点
(1)且现在STL是C++的一部分,被内建在c++编译器中,不需要额外安装。
(2)特点:数据结构(容器)和算法分离。迭代器作为容器和算法的桥梁。
(3)高重用性、高性能、高移植性、跨平台
2、string容器
在学习string容器之前,我们要先搞清楚string类型的特性。我们和char *字符串对比
- char* 是一个指针,string是一个类。----string封装了char *,管理这个字符串,是一个char *型的容器
- string封装了很多实用方法。----查找find,拷贝copy, 删除delete, 替换replace,插入insert
- 不用考虑内存释放和越界。----string管理char*所分配的内存,每一次string的复制、取值都由string类负责维护
- string和char*可以互相转换。----string str = "zhang3"; char* pch = str.c_str();
(1)string的构造函数
(2)string的赋值、取值操作
---- 成员方法assign("zhang3");赋值操作
---- []中括号数组下标的方式,这种方式存在越界风险,可能让程序崩溃
---- at(i);这种方式则会在越界时抛出越界异常,
(3)string拼接操作 +, +=
(4)string查找和替换
(5)string字符串比较
(6)string字符串子串
(7)string插入和删除
string案例
3、vector容器
3.1vector单口容器:动态数组、可变数组
vector提供两种迭代器,一种是正向迭代器begin和end,还有反向迭代器rbegin和rend。除了在尾部操作的pushback和popback之外,也提供插入方法insert。
注意:我们一般不使用insert在中间插入数据,因为vector容器是一块连续的地址空间,如果在中间插入,那么插入地点后面的元素,都要向后移动,消耗资源。
3.2vector动态增长原理
当插入新元素的时候,如果空间不足,vector会申请更大的一块内存空间,将原来空间的数据拷贝到新空间,并释放原来的空间。再将新元素放入新申请的空间。vector的空间申请策略是会申请两倍空间大小,除非数据量占用空间特别大的时候,vector会改变申请空间策略。
3.3vector API接口
(1)构造函数
(2)常用赋值操作