STL API
vector
变长数组
size() 返回元素个数;
empty() 返回是否为空;
clear() 清空;
front()/end() 返回头元素和尾元素;
push_back()/pop()_back() 尾部插入/弹出;
[] 随机访问;
支持比较运算,按字典序
初始化
vector<int> tmp(n); // 定义一个初始长度为n的元素值为0的vector
vector<int> tmp(n, x); // 定义一个初始长度为n的元素值为x的vector
去重
vector<int> vec;
/* 插入操作 */
sort(vec.begin(), vec.end()); // 先排序
auto iter = unique(vec.begin(), vec.end()); // 再去重,返回去重元素的下一个元素的迭代器
插入一个vector的元素
vector<int> vec(10);
vec.insert(vec.end(), vec.begin(), vec.end()); // 得到长为20值为0的vector
pair
打包一对元素
pair<int, int>
first 第一个元素;
second 第二个元素;
支持比较运算,以first为第一关键字,以second为第二关键字(字典序)
auto tmp1 = pair<int, char>(1, 'a');
auto tmp2 = make_pair(2, 'b'); //
pair<int, chr> tmp3(3, 'c');
pair<int, char> tmp4 = {4, 'd'};
string
字符串
size()/length() 返回字符串长度;
empty() 返回是否为空;
clear() 清空字符串元素;
substr(起始下标, [子串长度]) 返回子串; 可以省略子串长度,到最后;
c_str() 提取C类型字符串,返回该字符串的头地址
[] 支持随机访问
stack
栈
size() 返回栈中元素个数;
empty() 返回栈是否为空;
push() 入栈;
top() 返回栈顶元素;
pop() 弹出栈顶元素;
queue
队列
size() 返回队列中元素个数;
empty() 队列是否为空;
push() 队尾插入;
pop() 队头弹出;
front() 队头元素;
back() 队尾元素;
priority_queue
优先队列
size() 返回优先队列元素个数;
empty() 返回优先队列是否为空;
push()
pop()
top()
定义小根堆
priority_queue<int, vector<int>, greater<int>> q;
deque
双端队列
size()
empty()
clear()
front()/back()
push_front()/pop_front()
push_back()/pop_back()
begin()/end()
[]
map/set
set,map,multiset,multimap 基于平衡二叉树(红黑树),动态维护有序序列
共有方法
size()
empty()
clear()
begin()
end()
迭代器++, -- 返回前驱和后继迭代器,时间复杂度 O(logn)
set/multiset
insert() 插入一个元素;
find() 查找一个元素,返回该数的迭代器,找不到则返回 集合.end();
count() 返回元素的个数;
对于set可以判断集合中是否有该元素
erase()
(1) 输入一个数x,则删除所有x O(k+logn)
(2) 输入一个迭代器,则删除这个迭代器
lower_bound()/upper_bound()
lower_bound(x) 返回大于等于x的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
map/multimap
insert() 插入的数是一个pair {key,value}
erase() 输入的参数是pair或者迭代器
find()
count()
[] 注意multimap不支持此操作。时间复杂度为O(logn)
lower_bound()/upper_bound()
unordered_set/multiset unordered_map/multimap
哈希表。
和上面类似,增删改查的时间复杂度是O(1)
不支持 lower_bound()/upper_bound(),迭代器的++,--
自定义结构的排序
。。。
自定义结构小根堆
。。。