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);//将数组每个数初始化为3vector<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");//构造一个pairp={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()//插入,要插入一个pairerase()//删除,可以输入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()//返回有多少个1any()/none()//返回是否至少有一个1/是否没有1reset()//把所有位置为0set()//把所有位置为1set(k,v)//把第k位置为vflip() //把所有位取反flip(k)//把第k位取反