C++中常用的STL容器
C++中常用的STL容器:
Vector:变长数组:数组长度是可以动态变化的,倍增
Pair<X,Y>:二元组:前后两个元素类型可以不同
string:字符串:常见的函数:substr()截取一段字串,c_str()返回字符串的头指针
queue:队列:先进先出,push()插入,pop() 弹出,front() 返回队头元素
priority_queue:优先队列:本质是个堆,push() 插入元素,top() 返回堆顶元素,pop() 堆顶弹出
stack:栈:push() 插入,pop() 弹出,top() 返回栈顶元素
deque:双端队列:队头队尾都可以插入删除,可以随机访问
set、map、multiset、multimap:基于平衡二叉树(红黑树),动态维护有序序列
unordered_set、unordered_map、unordered_multiset、unordered_multimap:基于哈希表实现
bitset:压位,比如原先的bool存储0/1需要1字节,但是采用bitset可以将多个0/1存放在一个字节
Vector:
vector<int> a;//最简单的定义方法
vector<int> a(100);//定义数组的大小
vector<int> a(100,3);//将数组每个数初始化为3
vector<int> a[10];//这是定义了10个vector,和第一个不一样
clear()//清空容器中的元素
front()/back()//返回第一个/最后一个数
push_back()/pop_back()//最后一位:插入/删除
begin(),end()//vector的迭代器,begin是第一个元素,end是最后一个数的后面一个数
Pair:
pair<int,string> p ;//定义
p=make_pair(10,"ABC");//构造一个pair
p={20,"AAA"}//简单的构造方式
p.first/p.second//取得第一个/第二个元素
String:
string //可以直接相加拼接
substr(1,3)//从下标1开始,返回长度为3的字串
Queue:
push()//向队尾插入一个元素
front()//返回队头元素
back()//返回队尾元素
pop()//弹出队头元素
Priority_queue:
priority_queue<int> pq; //定义的优先队列默认是大根堆
priority_queue<int,vector<int>,greater<int>> pq;//定义一个小根堆
push()//向堆中插入一个元素
top()//返回堆顶元素
pop()//弹出堆顶元素
Stack:
push()//向栈顶插入一个元素
top()//返回栈顶元素
pop()//弹出栈顶元素
Deque:
clear()//清空容器中的元素
front(),back()//返回第一个/最后一个元素
push_back(),pop_back()//向最后插入一个元素,弹出最后一个元素
push_front(),pop_front()//向队头插入一个元素,弹出第一个元素
begin(),end()//比较器
支持随机存取,但是速度较慢,不常用
Set,Multiset:
set<int> s//不允许出现重复元素的集合
multiset<int> ms//允许出现重复元素的集合
find()//查找一个数,不存在的话会返回end迭代器
insert()//插入一个数
count()//返回某个元素的出现的次数
erase(x)//删除集合中所有值为x的结点
erase(*i)//删除这个迭代器所在的元素,只删除这一个
lower_bound(X);//返回大于等于X的最小的数的迭代器
upper_bound(X);//返回大于X的最小的数的迭代器
Map,Multimap:
map<int,string> m;//不允许key重复
multimap<int,string> mm;//允许key重复
insert()//插入,要插入一个pair
erase()//删除,可以输入pair或者迭代器
find()//查找
lower_bound(X);//返回大于等于X的最小的数的迭代器
upper_bound(X);//返回大于X的最小的数的迭代器
unordered_set、unordered_map、unordered_multiset、unordered_multimap:
操作与上面操作类似
优点:增删改查时间复杂度为O(1)
缺点:不支持迭代器的++,-- ,也不支持lower_bound(X);upper_bound(X)操作
Bitset:
bitset<1000> bs//定义时写的是长度
支持所有位运算
cout()//返回有多少个1
any()/none()//返回是否至少有一个1/是否没有1
reset()//把所有位置为0
set()//把所有位置为1
set(k,v)//把第k位置为v
flip() //把所有位取反
flip(k)//把第k位取反

浙公网安备 33010602011771号