C++常用STL

本文详细介绍了C++中常用的数据结构如vector、pair、string、queue、priority_queue、stack、deque以及集合类如set、map、unordered_set和unordered_map,还有bitset的使用。着重讲解了它们的基本操作和特性,以及内存分配的原理。
摘要由CSDN通过智能技术生成

vector

变长数组(数组长度可以动态变化) 倍增思想
size()返回元素个数
empty()返回是否为空
clear()清空
front()返回vector第一个数/back()返回vector最后一个数
push_back向vector最后插入一个数/pop_back把vector最后一个数删掉
begin()是vector的第0个数/end()是vector的最后一个数的后面那个数 迭代器
vector支持随机寻址
vector的三种遍历方式:
for(int i = 0;i<a.size();i++)cout<<a[i]<<' ';
for(vector<int>::iterator i = a.begin();i!a.end();i++)cout<<*i<<' ';
//iterator<int>iterator可以直接写成auto,a.begin()就是a[0],a.end()就是a[size()]
for(auto x : a)cout<<x<<' ';
vector 支持比较运算,按字典序

pair<int,int>

first 第一个元素,second 第二个元素
支持比较运算,以first为第一关键字,以second为第二关键字 (字典序)

string 字符串

size()/length()返回字符串长度
empty()
clear()
'+'号做字符串拼接
substr()返回某一个子串
c_str()返回string对应数组的头指针

queue 队列

size()
empty()
push()往队尾插入一个元素
front()返回队头元素
back()返回队尾元素
pop()弹出队头元素

priority_queue 优先队列 (堆)

默认是大根堆
push()往堆里插入一个元素
top()返回堆顶元素
pop()弹出堆顶元素
定义成小根堆的方式:
priority_queue<int,vector,greate>q;

stack 栈

size()
empty()
push()往栈顶插入一个元素
top()返回栈顶元素
pop()弹出栈顶元素

deque 双端队列

队头队尾都可以插入弹出,且支持随机寻址
size()
empty()
clear()
front()返回第一个元素/back()返回最后一个元素
push_back()向最后插入一个元素/pop_back()弹出最后一个元素
push_front()向队首插入一个元素/pop_front()从队首弹出一个元素
begin()/end()迭代器
//特点:慢,用的不多

set,map,multiset,multimap

基于平衡二叉树(红黑树)实现 动态维护有序序列
size()
empty()
clear()
begin()/end() 支持++ --操作 返回前驱和后继
set/multiset:set里没有重复元素,multiset里可以有重复元素
insert() 插入一个数
find()查找一个数
count()返回某一个数的个数
erase():
1.输入是一个数x,删除所有x 时间复杂度是o(k+logn) k是x的个数
2.输入是一个迭代器,删除这个迭代器
lower_bound()/upper_bound():
lower_bound(x) 返回大于等于x的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
map/multimap://存的是一个映射
insert()插入的数是一个pair
erase()输入的参数是pair或者迭代器
find()
[]可以像数组一样用,时间复杂度是o(logn)

unordered_set,unordered_map,unordered_multiset,unordered_multimap

基于哈希表实现,无序
和上面类似,增删改查的时间复杂度是o(1)
不支持lower_bound()/upper_bound()和迭代器的++ –

bitset 压位

bitset<10000>s;
~,&,|,^
>>,<<
==,!=
[]

any()返回有多少个1
count()判断是否至少有一个1
none()判断是否全为0
set()把所有位置变成1
set(k,v)将第k位变成v
reset()把所有位变成0
flip()把所有位取反,等价于~
flip(k)把第k位取反

系统为某一程序分配空间时,所需时间,与空间大小无关,与申请次数有关

  • 29
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值