STL
1.vector
- 定义一个长度为10的数组
vector<int> a(10)
- 定义一个长度为10的数组并将其每个值都初始化为3
vector<int> a(10,3)
a.size()
返回该vector数组中元素的个数a.empty()
返回该vector是否为空,为空返回true,不为空返回falsea.clear()
将数组清空a.front() / a.back()
返回数组的第一个数 / 最后一个数a.push_back() / a.pop_back()
在数组的最后插入一个数 / 将数组的最后一个属弹出- 迭代器
a.begin() / a.end()
(可看作为指针,begin为第一个数,end为最后一个的下一个数,前闭后开) - 支持比较运算,按照字典序来进行比较
- 遍历:(注意使用迭代器时要用 * 解除限制)
for (int i = 0; i < a.size(); i++) {
cout << a[i] << ' ';
}
for (vector<int>::iterator it = a.begin(); it != a.end(); it++) {
cout << *it << ' ';
}
for (auto x : a) {
cout << x << ' ';
}
2.pair<int,string> p
p.first() / p.second
返回序列对的第一个值 / 第二个值- 支持比较运算(按照字典序,以first为第一关键字,以second为第二关键字)
- 构造序列对时可用
p = make_pair(10,"wyh"
或p = {20,"abc"}
- 若有两个以上的序列时可用pair的叠加
pair<int,pair<int,string>>
3.string
s.size()
s.empty()
s.clear()
- 将字符串的叠加时可用 +=
a.substr(m,n)
返回a字符串中下标从m开始长度为n的字符段,若无第二个参数则直接到字符串的最后a.c_str()
将C++的string转化为C的字符串数组,c_str()生成一个const char *指针,指向字符串的首地址。
4.queue 队列
只允许在表的前端(front)进行删除操作,而在表的后端(back)进行插入,队尾插入,队头弹出
q.size()
q.empty()
- 无clear()函数,若要清空则直接将队列重新构造为一个空队列即可
q = queue<int>()
q.push()
向队尾插入q.front()
返回队头元素q.back()
返回队尾元素q.pop()
弹出队头元素
priority_queue 优先队列(默认为大根堆)
q.push()
向堆中插入一个元素q.top()
返回堆顶元素q.pop()
弹出堆顶元素- 无clear函数
- 定义大根堆(默认):
priority_queue<int> heap
定义小根堆:priority_queue<int ,vector<int>, greater<int>>
5.stack
s.size()
s.empty()
s.push()
向栈顶插入一个元素s.top()
返回栈顶元素s.pop()
弹出栈顶元素- 无clear()
6.deque,双端队列
q.size()
q.empty()
q.clear()
q.front() / q.back()
返回第一位元素 / 返回最后一位元素q.push_back() / q.pop_back()
向队尾插入一个元素 / 弹出队尾元素q.push_front() / q.pop_front()
向对首插入一个元素 / 弹出队首元素begin() / end()
迭代器
7.set / muitiset // map / multimap /
size()
empty()
clear()
begin() / end()
支持 ++ / - - 返回前驱和后继,即前面一个数和后面一个数
set / multiset
s.insert()
插入一个数s.find()
查找一个数s.count()
返回某一个数的个数- s.erase()
- 输入是一个数时,删除所有x
- 输入是一个迭代器时,删除这个迭代器
lower_bound(x)
返回大于等于x的最小的数的迭代器
upper_bound(x)
返回大于x的最小的数的迭代器
map / multimap
m.insert()
插入的数是一个pairm.erase()
输入的参数是pair或迭代器m.find()
如果存在所查找的数则返回其对应的迭代器,若不存在则返回m.end()
所以在使用find函数时,后面经常配套使用一个 if 判断语句判断其是否为 m.end(),然后在对其进行相关的操作lower_bound(x)
返回大于等于x的最小的数的迭代器
upper_bound(x)
返回大于x的最小的数的迭代器
8.unordered _set / unordered_map / unordered_multiset / unordered_multimap
具体用法和上面类似,但由于是unordered无序,所以无 lower_bound() / upper_bound() 函数,也不支持迭代器的++ 和 - -
9.bitset,压位
在创建bitset类型时,< >中写的是个数而非数据类型
bitset模拟的是一个bool类型的数组,但是优化了内存空间
唯一需要注意的是,bitset<>模板类虽然重载了中括号运算符,bs[0]表示的是将该数值转换为二进制时的最末尾元素,而非首位(其意义和数组并不相同)。
bs.any()
返回是否至少有一个1bs.none()
返回是否全为0bs.count()
返回1的个数bs.set()
将所有位置为1
bs.set(k,v)
将第k位置为vbs.reset()
将所有位变为0bs.flip()
等价于取反bs.flip(k)
把第k位取反