C++常用STL

vector

定义:
vector<int> a;
vector<int> a(10);//定义长度为10
vector<int> a(10,3);//定义长度为10,且初始值为3
vector<int> a[N];//vector数组

函数:
a.size();//返回元素个数,时间复杂度O(1),所有容器都有
a.empty();//是否为空,时间复杂度O(1),所有容器都有
a.clear();//清空
a.front();//返回第一个元素
a.back();//返回最后一个元素
push_back()/pop_back();//插入、删除最后一个元素

迭代器:begin()/end();
支持比较运算:按字典序比较
vector<int> a(4,3),b(3,4);
a<b

pair

存储二元组
pair<int,string> p;
p.first //第一个元素
p.second //第二个元素
支持比较运算,排序,以first为第一关键字,second为第二关键字
初始化:
p=make_pair(10,"xyz");
p={10,"xyz"};
pair<int,pair<int,int>>p

string

string a="xyz";
a+="def";
//a=xyzdef
a.size();//长度
a.length();//长度
a.empty();//判空
a.substr(1,2);//从下标为1开始输出长度为2的子串,超过则只输出最后一个字母为止(省略第二个参数也一样)
a.c_str();//返回存储的起始地址可用于printf("%s",a.c_str());

queue

queue<int>a;
a.size();
a.empty();
a.push(x);//向队尾插入x
a.front();//返回队头元素
a.back();//返回队尾元素
a.pop();//弹出队头元素
无clear函数
不支持迭代器

priority_queue(堆)

默认大根堆
priority_queue <int,vector<int>,less<int> >q;//大根堆
priority_queue<int,vector<int>,greater<int>>a;//小根堆
a.size();
a.empty();
a.push(x);//向堆中插入x
a.top();//返回堆头元素
a.pop();//弹出堆顶元素
无clear函数

stack

a.size();
a.empty();
a.push(x);//向栈顶插入x
a.top();//返栈顶元素
a.pop();//弹出栈顶元素
无clear函数
不支持迭代器

deque(双端队列)

deque<int>a;
a.size();
a.empty();
a.clear();
a.front();
a.back();
a.push_back()/a.pop_back//插入/弹出队尾一个元素
a.push_front()/a.pop_front()//插入/弹出队首一个元素
随机访问支持迭代器:a.begin()/a.end();

set/multiset

基于红黑树,动态维护有序序列
multiset可有重复元素
set<int>s;
multiset<int>ms;
insert();//插入一个元素,时间复杂度log(n)
find();//查找元素,不存在则返回end()迭代器
count();//返回某一个数的个数
erase()
    (1)输入是一个数x,删除所有x //时间复杂度 O(k+logn)
    (2)输入是一个迭代器,删除这个迭代器//multiset中用
核心操作:
lower_bound()/upper_bound()
//lower_bound(x)返回大于等于x的最小数的迭代器,不存在则返回end()迭代器
//upper_bound(x)返回大于x的最小数迭代器,不存在则返回end()迭代器
随机访问支持迭代器:a.begin()/a.end();

map/multimap

基于红黑树,动态维护有序序列
insert();//insert(make_pair(,))
erase();//删除pair或者迭代器
map<string,int>mp
lower_bound()/upper_bound()
随机访问支持迭代器:a.begin()/a.end();
unordered_set,unordered_map,unordered_multimap,unordered_multiset基于hash无序

bitset

压位,每个字节存八位,bool数组的1/8
例如:开10000*10000bool矩阵
bool 存的话需要10^8B
bitset 存需要(10^8)/8B
bitset<10000> s;//bitset<个数>
支持位运算操作
~&|^
>>,<<
将s看作某个数支持==,!=
s[n]返回某一位是0/1
count();//返回1的个数
any/none();//any判断是否至少一个1,none判断是否全为0
set()//将所有位置为1
set(k,v)//将第k位变为v
reset()//将所有位变为0
size()//返回bitset大小
C++竞赛中,常用STL(Standard Template Library)组件有vector、stack以及算法函数next_permutation。vector是一个动态数组容器,可以方便地进行元素的插入、删除和访问。stack是一个后进先出(LIFO)的容器,常用于实现递归、深度优先搜索等算法。next_permutation是一个算法函数,用于按照字典序生成某个序列的所有排列。 在竞赛中,我们可以利用vector来存储元素,使用push_back函数添加元素,使用[]操作符或迭代器进行元素的访问。可以使用stack来模拟递归过程,实现一些深度优先搜索的问题。而使用next_permutation函数可以方便地生成某个序列的所有排列。 举个例子,如果我们想要按照字典序输出1到n的全排列,可以使用next_permutation函数结合vector来实现。首先,我们可以使用一个for循环将1到n的元素添加到vector中。然后,使用do-while循环来不断调用next_permutation函数,每次生成下一个排列并输出。最后,当next_permutation函数返回false时,表示已经生成了所有的排列,循环结束。 另外,如果我们需要使用栈来解决一些问题,可以使用stack容器。可以使用push函数将元素入栈,使用pop函数将元素出栈。栈的特点是后进先出,所以可以用来模拟递归过程或实现一些需要回溯的算法。 总结起来,在C++竞赛中,常用STL组件有vector、stack和算法函数next_permutation。vector可以方便地进行元素的插入、删除和访问,stack可以模拟递归过程,而next_permutation函数可以生成某个序列的所有排列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chp的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值