关于 C++ STL 的用法(部分,自行备忘)

0xff 前言

众所周知,OIer 选手使用的 C++ 可以说是 C with STL。
在 NOIP/CSP 的时候,我们就可以通过 STL 来减小代码的长度,比如说 堆、哈希 等。当然也有被卡常数的危险(但是一般都不会)。
由于有些时候会忘记一些 STL 的用法,所以就做了个汇总(指我学过的)。
文中 T 在文中表示一个变量类型

0x00 队列(queue)

定义:

#include<queue>
std::queue<T> q;

函数:

void q.push(T x) //在队尾插入 O(1)
void q.pop()//在队尾删除,队列为空时会 RE O(1)
bool q.empty()//返回队列是否为空 O(1)
unsigned int q.size()//返回队列元素个数 O(1)
T q.front()//返回队首元素 O(1)
T q.back()//返回队尾元素 O(1)

0x01 双端队列(deque)

定义:

#include<queue>
std::deque<T> q;

函数:

void q.push_front(T x)//在队首插入 O(1)
void q.pop_back()//在队首删除,队列为空时会 RE O(1)
void q.push_back(T x)//在队尾插入 O(1)
void q.pop_back()//在队尾删除,队列为空时会 RE O(1)
bool q.empty()//返回队列是否为空 O(1)
unsigned int q.size()//返回队列元素个数 O(1)
T q.front()//返回队首元素 O(1)
T q.back()//返回队尾元素 O(1)

0x02 优先级队列(priority_queue)

定义:

#include<queue>
std::priority_queue<T> q;//小根堆,需要重载 operator>
std::priority_queue<T,vector<T>,greater<T> > q;//大根堆,需要重载 operator<
std::priority_queue<T1,T2,T3>//依次为存储变量类型,存储容器,比较函数

函数:

T q.top()//返回堆顶元素 O(1)
void q.push(T x)//加入元素 O(log(q.size()))
void q.pop()//删除堆顶的元素  O(log(q.size()))
unsigned int q.size()//返回队列元素个数 O(1)
bool q.empty()//返回队列是否为空 O(1)

0x03 动态数组(vector)

定义:

#include<vector>
std::vector<T> q;

函数:

//咕咕咕

运算符:

operator[] (const int x) //返回这个容器的第 x 项(下标从 0 开始)

0x04 集合(set&multiset)

定义:

#include<set>
std::set<T> s;//需要重载 operator< 自动去重
multiset::set<T>//需要重载 operator< 不去重,用法相同

函数:

set<T>::iterator//迭代器
set<T>::iterator operator++//到下一个迭代器 O(1)
set<T>::iterator operator--//到上一个迭代器 O(1)
iterator s.begin()//返回第一个元素的迭代器,如果容器为空就和 end() 的返回值相同 O(1)
iterator s.end()//返回最后一个元素的迭代器,注意这个迭代器是占位符(不存在) O(1)
iterator s.lower_bound(T x)
//返回第一个大于等于 x 的元素的迭代器,如果不存在返回 end() O(log2(q.size())
iterator s.upper_bound(T x)
//返回第一个大于 x 的元素的迭代器,如果不存在返回 end() O(log2(q.size())
for(set<T>::iterator i=s.begin();i!=s.end();i++) std::cout<<*x<<' ';
//便利整个容器并输出 应用
bool s.empty()//容器是否为空 O(1)
void s.size()//容器内元素数量 O(1)
void s.clear()//清空容器 O(s.size())
void s.insert(T x)//插入 O(log2(s.size()))
void s.erase(T x)//删除元素(如果不存在就不删除) O(log2(s.size()))
void s.erase(<set>::iterator x)//删除迭代器对应的元素 O(log2(s.size()))
posted @ 2021-10-27 19:23  jiangtaizhe001  阅读(130)  评论(2编辑  收藏  举报