STL
概念
STL(Standard TemplateLibrary),即标准模板库,从根本上说,STL是一些“容器”的集合,这些“容器”有list、vector、set、map等,STL也是算法和其他一些组件的集合。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。
STL包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)。在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形。
常用STL
vector(向量),stack(栈),queue(队列),map(映射),set(集合)等等。
本节课简介
迭代器、
迭代器(iterator)功能:访问容器对象的元素。
所有标准库容器都可以使用迭代器,其中只有少数几种(vector)才同时支持下标运算符。
string对象不属于容器类型,但是string支持很多与容器类型类似的操作。
迭代器分为有效和无效,这点与指针差不多。
- 有效的迭代器:指向某个元素,或者指向容器中尾元素的下一个位置;
- 无效的迭代器:除上述的其他所有情况。
使用样例(以vector为例)
// 一维vector
vector<int> v;
// ...赋值
vector<int>::iterator it; // 迭代器类型应与容器类型一致
for (it = v.begin(); it != v.end(); it++)
{
cout << *it << ' ';
}
// 二维vector
vector<vector<int>> v;
// ...赋值
vector<vector<int>>::iterator it;
for (it = v.begin(); it != v.end(); it++)
{
vector<int>::iterator itt = (*it).begin(); // 逐层分解使用迭代器
for (; itt != (*it).end(); itt++)
{
cout << *itt << ' ';
}
cout << endl;
}
map(映射)
1.map
map(映射)是STL的一个关联容器,底层是由红黑树实现的,每个操作的复杂度是O(logn)。
map会自动对数据进行排序。
使用时需加上头文件
#include <map>
使用方法如下
// 映射
map<int, int> m; // 定义
m[x] = y; // 赋值
m.find(x); // 查找x是否存在
m.count(x); // 查找键为x的数量 查找x是否存在
m.empty(); // 判断是否为空
m.size(); // 容器内元素数量
m.insert(x); // 插入 x必须为对的形式 可以为pari的形式 通过make_pari创建
m.erase(x); // 将键值为x的元素删除
2.unordered_map(无序映射)
unordered_map(无序映射)是STL的一个关联容器,用于存储由键值和映射值组合而成的元素,底层是由哈希实现的,每个操作的复杂度趋近O(1)。
顾名思义,unordered_map不会对数据进行排序。
使用时需加上头文件
#include <unordered_map>
使用方法与map类似
// 映射
unordered_map<int, int> m; // 定义
m[x] = y; // 赋值
m.find(x); // 查找x是否存在
m.count(x); // 查找键为x的数量 查找x是否存在
m.empty(); // 判断是否为空
m.size(); // 容器内元素数量
m.insert(x); // 插入 x必须为对的形式 可以为pari的形式 通过make_pari创建
m.erase(x); // 将键值为x的元素删除
3. multimap
multimap是关联式容器,它按特定的次序(按照key来比较)存储由键和值组合而成的元素,多个键值对之间的值可以重复,底层是由红黑树实现的。
multimap和map的唯一区别是multimap中的key可以重复,而map的key是唯一的。
使用时需加上头文件
#include <map>
set(集合)
...敬请期待