STL 容器
\(vector\)
动态数组。
#include<vecoter>//头文件
vector</*类型*/> /*名称*/;//定义
vector</*类型*/>::iterator /*名称*/;//迭代器定义
for(int i=0; i<v.size(); i++)//遍历,注意从 0 开始,到 v.size()-1 结束。
for(it=v.begin(); it!=v.end(); it++)//迭代器遍历
以下操作时间复杂度为 O(1):
v.push_back(/*插入的元素*/);//插入元素
v.pop_back();//删除末尾元素
v.size();//返回数组长度
v.empty();//判断是否为空,空返回 1,否则返回 0。
v.front();//返回首元素
v.back();//返回尾元素
v.clear();//清空
\(set\)
有序集合,不重复,始终保持有序,默认从小到大。
#include<set>//头文件
set</*类型*/> /*名称*/;//定义
set</*类型*/>::iterator /*名称*/;//迭代器定义
for(int i=0; i<s.size(); i++)//遍历,注意从 0 开始,到 v.size()-1 结束。
for(ss=s.begin(); ss!=s.end(); ss++)//迭代器遍历
以下操作时间复杂度为 O(\(\log\) n):
s.insert(/*插入的元素*/);//插入元素
s.erase(/*删除的元素或迭代器指向的元素*/);//删除元素
s.size();//返回数组长度
s.find(/*查找的数*/)//判断它在集合 s 中,是返回它的迭代器,否则返回 s.end()
s.count(/*查找的数*/);//返回它集合 s 中的个数
二分查找:
s.lower_bound(x)//查找 >= x的元素中最小的一个,返回该元素的迭代器
s.upper_bound(x)//查找 > x 的元素中最小的一个,返回该元素的迭代器
multiset:有序多重集合,内部元素是可以重复出现的,并保持有序。
操作和 \(set\) 一样。
\(map\)
\(map\) 容器是一个 键值对 \(key-value\) 的映射。算法内部实现也是关于 \(key\) 的平衡树。
默认按照 从小到大排序的,也可以重载 < 运算符来自定义 的排序方式。
\(key\) 只能是不可变类型,且不可以重复;
\(value\) 可以是任意类型,且能够重复。
申明的格式 map<key_type, value_type> names
。
#include<map>//头文件
map</*类型1*/,/*类型2*/> /*名称*/;//定义
map</*类型1*/,/*类型2*/>::iterator /*名称*/;//迭代器定义
for(int i=0; i<mp.size(); i++)//遍历,注意从 0 开始,到 v.size()-1 结束。
for(it=mp.begin(); it!=mp.end(); it++)//迭代器遍历
以下操作时间复杂度为 O(1):
mp.insert(make_pair(/*键*/,/*值*/));//插入元素
mp.erase(/*键*/);//删除以它为键的键值对
mp[/*键*/]=/*某数值*/;//修改键
mp.find(/*查找的键值对的键*/)//判断它在集合 s 中,是返回它的迭代器,否则返回 mp.end()