STL(Standard Template Library)标准模板库
整理自《算法笔记》
| vector(向量)
-
头文件
#include<vector>
-
用途:
**1、**变长数组;
**2、**以邻接表存储图(《算法笔记》10.2.2);
3、有些场合需要把部分数据输出在同一行,数据中间用空格隔开,由于输出数据的个数是不确定的,为了更方便地处理最后一个满足条件的数据后面不输出额外的空格,可以先用vector
记录所有需要输出的数据,然后一次性输出。 -
访问:
1、通过下标(从0
到size() - 1
)
2、通过迭代器 (vector<typename>::iterator
)
注:v[i]
与 *(v.begin() + i)
是等价的
- 比较:
vector<>可以直接比较大小,按字典序排列;故vector
数组在用sort()
时无需额外写比较函数;(参考)
只有
string
和vector
中允许使用v.begin()+i
这种迭代器加整数的写法
-
常用函数
push_back(x)
: 在尾部添加一个元素x
pop_back()
: 删除尾元素size()
: 返回元素个数clear()
: 清空insert(it, x)
: 向vector
的迭代器it
处插入元素x
erase(it)
:删除迭代器it
处的元素erase(first, last)
:删除迭代器区间[first, last)
内的元素
-
细节:
容器内容也是一个STL容器时,记得在> >
之间加空格,
即vector<vector<int> > name;
| set(集合)
集合:内部自动 递增 有序且不含重复元素
红黑树实现
-
头文件
#include<set>
-
用途:
1、需要去重但却不方便直接开数组的情况 -
访问:
只能通过迭代器 (set<typename>::iterator it
) -
常用函数
insert(x)
: 向set
中插入x
,自动递增排序和去重 (O(logN)
)find(value)
: 返回set
中对应值为value
的迭代器(O(logN)
)查找失败时返回st.end()
erase(it)
:删除迭代器it
处的元素 (O(1)
)erase(value)
:其中value
为所需删除元素的值(O(logN)
)erase(first, last)
:删除迭代器区间[first, last)
内元素(O(log(first - last))
)size()
: 返回元素个数(O(1)
)clear()
: 清空 (O(N)
)
-
延伸:
1、如果需要处理元素不唯一的情况,则需使用multiset
2、如需只去重但不排序,C++ 11标准中增加了unordered_set
(以散列代替set
内的红黑树),速度比set
快得多
| string(字符串)
-
头文件
#include&