STL
Vector-变长数组
初始化
vector<int>a[n];
vector<int>a(10,3); //长度为十,每个数字为三
操作
a.size() //返回元素个数,时间复杂度为o(1)
a.empty()//是否为空
a.clear() //清空
front() //返回vector第一个数
back() //返回vector最后一个数
push_back()//最后插入一个数
pop_back() //最后一个数删掉
遍历
1.for(int i=0;i<a.size();i++) cout<<a[i]<<" ";
2.for(vector<int>::iterator /(auto) i=a.begin();i!=a.end();i++) cout<<*i<<" ";
3.for(auto x:a) cout<<x<<' ';
支持比较运算,按字典序
pair
初始化
pair<int,int> p;
p=make_pair(10,"yyy");
p={20,"aaa"};
pair<int,pair<int,int>>p;
支持比较运算,按字典序,以first为第一关键字
string
字符串
substr() 返回某一个字串
c_str()
empty()
size()/ength()返回字符串长度
clear()
string a="yxc"
a+="def"
a+='c'
cout<<a<<endl;
cout<<a.substr(1,2)<<endl;//c从下标一开始,输出两个 ----xc
printf("%S\n",a.c_str() ); //
queue
size()
empty()
push() 队尾插入一个元素
front()返回队头元素
back() 返回队尾元素
pop()弹出队头元素
清空
q=queue<int>();
priority_queue(堆)
优先队列
定义默认是大根堆
priority_queue<int> heap;
定义小根堆
priority_queue<int,vector<int>,greater<int> > heap;
push()插入一个元素
top()返回堆顶元素
pop()弹出堆顶元素
stack
size()
empty()
push()向栈顶插入一个元素
top()返回栈顶元素
pop()弹出栈顶元素
deque双端队列
速度慢
size()
empty()
clear()
front()
back()
push_back()/pop_back()
push_front()/pop_front()
begin()/end()
队头队尾都可插入删除
set multiset
基于平衡二叉树(红黑树),动态维护有序序列
multisetMS;
可以有重复元素
setS;
不能有重复元素
set
insert() 插入一个数
find()查找一个数
count() 返回一个数的个数
erase() 输入是一个数x,删除所有x o(k+logn)
输入是一个迭代器,删除这个迭代器
lower_bound(x)返回大于等于x的最小的数的迭代器
upper_bound(x)返回大于x的最小的数的迭代器
size()
empty()
clear()
map multimap
insert() 插入的是一个pair
erase() 输入的参数是pair或迭代器
find()
lower_bound(x)返回大于等于x的最小的数的迭代器
upper_bound(x)返回大于x的最小的数的迭代器
size()
empty()
clear()
unordered_set,unordered_map,unordered_multiset,unordered_multimap
基于哈希表
增删改查时间复杂度o(1)
不支持lower_bound(x) ,upper_bound(x) (基于排序的操作)
不支持迭代器的++,–
bitset
压位
省八倍空间
bitset<1000>s; //个数
与,或,异或
<<,>> 移位操作
==,!=
[ ]
count() 返回多少个一
any/none() 判断是否至少有一个一 / 判断是否全为0 true/false
set() 所有位置一
set(k,v) 把第k位变成v