初识STL
标准模板库简称STL
8.1 STL简介
STL的内容从广义上讲分为三个主要部分:容器、迭代器、算法。
在C++的标准中,STL被组织在13个头文件中:< algorithm>、< deque>、< functional>、< iterator>、< vector>、< list>、< map>、< memory>、< numeric>、< queue>、< set>、< stack>、< utility>,使用不同的内容,需要包含不同的头文件。
1.容器
STL主要包含的容器主要有以下几种:
- vector< T >
- list< T>
- queue< T>
- stack< T>
- deque< T>
- priority< T>
- set< T>
- multiset< T>
- map< key,value>
- multimap< key,value>
2.迭代器
STL定义了5种类型的迭代器:输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器。
3.算法
8.2 序列式容器
8.2.1 序列容器概述
标准库中提供的基本序列式容器包括:vector(向量)、deque(双向队列)、list(列表)
8.2.2 vector类模板
1.创建vector对象
(1)指定容器大小
vector<int> v1(10);
vector<string> v2(5);
(2)指定初始值
vector<int> v1(10,1);
vector<string> v3(3,"aa");
(3)列表初始化
vector<int> v1{1,2};
vector<string> v3{"a","b","c"};
(4)初始化状态为空
vector<int> v1;
2.获取容器容量大小
v.capacity();
v.size();
3.赋值函数
v.assign(n,elem); //将n个elem元素赋值给容器
v.assign(begin,end); //将[begin,end]区间中的元素赋值给容器
4.访问容器中的元素
v.at(int idx);
5.从尾部插入和删除元素
v.push_back(type elem& t);
v.pop_back();
6.获取头部和尾部元素
//返回容器的头部和尾部的引用
v.front();
v.back();
//返回头尾元素的迭代器(可以理解为指针)
v.begin();
v.end();
7.插入和删除元素
v.insert(pos,elem);
v.insert(pos,n,elem);
v.insert(pos,begin,end);
v.erase(pos);
v.erase(begin,end);
8.2.3 deque 模板
//添加元素
d.push_back();
d.push_front();
//删除元素
d.pop_back();
d.popfront();
8.2.4 list模板
//删除元素
lt.remove(elem);
//两个列表容器合并
lt.merge(list& lt1); //按从小到大排列
//排序功能
lt.sort();
//将容器lt1插入到迭代器it指示的位置前
lt.splice(iterator it,list& lt1);
//将lt1中的元素first插入到迭代器it指示的位置前
lt.splice(iterator it,list& lt1,iterator first);
//将lt1容器中[first.last)区间的元素插入到迭代器it指示的位置前面
lt.splice(iterator it,list& lt1,iterator first,,iterator last);
8.3 关联型容器
标准库提供四种关联型容器:set(集合)、multiset(多重集合)、map(映射)、multimap(多重映射)
8.4 迭代器
8.5 迭代器适配器
8.5.1 逆向迭代器
8.5.2 插入迭代器
8.5.3 流迭代器
8.6 迭代器辅助函数
8.7 算法
1. for_each()算法
2. find()算法
3. copy()算法
4. sort()算法
5. accumulate()算法