vector 变长数组,倍增思想
size()
empty()
clear() 清空
front()/back() 最前一个数 最后一个数
push_back() /pop_back()
begin() / end()
支持比较运算
pair<int,int>
pair<int,string> p; 结构体
p.first 第一个元素
p.second 第二个元素
支持比较远算,以first为第一关键字,以sceond为第二关键字
pair<int,string> p;
p=make_pair(10,"ef");
p={10,"abd"};
string 字符串
substr() c_str()
size() length()
empty()
clear()
string a="zwh";
a+="def";
a+='c';
cout<<a<<endl;
cout<<a.substr(1,2)<<endl;
queue 队列
push()队尾插入 front()队头元素 pop()对头弹出
size()
empty()
push() 向队尾插入一个元素
front() 返回队头元素
back() 返回队尾元素
pop() 弹出队头元素
priority_queue 优先队列 默认大根堆
堆
push() 插入一个元素
top() 返回堆顶元素
pop() 弹出堆顶元素
priority_queue<int,vector,greater> heap;//小根堆
stack 栈
push() 向栈顶插入一个元素
top() 返回栈顶元素
pop() 弹出栈顶元素
deque 双端队列
size()
empty()
clear()
front()
back()
push_back()向最后插入一个元素 pop_push()弹出最后一个元素
push_front()向队首插入与一个元素
pop_back() 从队首弹出一个元素
begin() /end()
set,map,multiset,multimap 基于平衡二叉树(红黑树,动态维护有序数列
size()
empty()
clear()
begin()/end() ++,-- 返回前驱和后继
set/multiset
insert() 插入一个数
find() 查找一个数
count() 返回莫一个数的个数
erase()
(1) 输入一个数x,删除所有x
(2) 输入一个迭代器,删除这个迭代器
lower_bound()/upper_bound()
lower_bound(x) 返回大于等于x的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数迭代器
map/multimap
insert() 插入的数是一个pair 映射
erase() 输入的参数时pair或者迭代器
find()
[]时间复杂度 是O(logn)
lower_bound()/upper_bound()
unordered_set,unordered_map,unordered_multiset,unordered_multimap 哈希表
和上面类似,增删改查时间复杂度是O(1)
不支持 lower_bound()/upper_bound() 不支持迭代器的加加减减
bitset 压位
bitsit<1000> s;
~s,&,|,^
>>,<<
==,!=
[]
count() 返回有多少1
any() 判断是否至少有一个1
none() 判断是否全为0
set(), 把所有位置成1
set(k,v) 将第k个变成v
reset() 把所有位变成0
flip() 等价于~
flip(k) 把第k位取反
vector 小例子
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<vector>
using namespace std;
int main()
{
vector <int> a;
for(int i=0; i<10; i++)
a.push_back(i);
for(int i=0; i<a.size(); i++) cout<<a[i]<<" ";
for(vector<int> ::iterator i=a.begin()-1; i!=a.end(); i++) cout<<*i<<endl;
cout<<endl;
for(auto x:a) cout<<x<<" "; //迭代器
// for(auto x:a) cout<<x<<endl;
return 0;
}