1.栈(stack)
核心:先入栈,后出栈
#include <stack>
using namespace std;
stack <int> s;
s.top(); //取栈顶
s.push(x); //入栈
s.pop(); //出栈
s.empty(); //是否为空
s.size(); //栈中元素个数
2.队列(queue)
核心:先入队,先出队
#include <queue>
using namespace std;
queue <int> q;
q.front(); //取队头
q.push(x); //入队
q.pop(); //出队
q.empty(); //是否为空
q.size(); //队列中元素个数
3.迭代器(iterator)
*iter //对iter进行解引用,返回迭代器iter指向的元素的引用
iter->men //对iter进行解引用,获取指定元素中名为men的成员。等效于(*iter).men
++iter //给iter加1,使其指向容器的下一个元素
iter++
--iter //给iter减1,使其指向容器的前一个元素
iter--
iter1==iter2 //比较两个迭代器是否相等,当它们指向同一个容器的同一个元素或者都指向同同一个容器的超出末端的下一个位置时,它们相等
iter1!=iter2
以vector为例
#include<bits/stdc++.h>
using namespace std;
vector<int> q;
vector<int>::iterator it1=q.begin();
vector<int>::iterator it2=q.end();
//遍历q中的所有元素
for(it1=q.begin();it1!=it2;it1++)
{ }
特别注意!!!在C++定义的容器类型中,只有vector和queue容器提供迭代器算数运算和除!=和==之外的关系运算:
iter+n //在迭代器上加(减)整数n,将产生指向容器中钱前面(后面)第n个元素的迭代器。新计算出来的迭代器必须指向容器中的元素或超出容器末端的下一个元素
iter-n
iter1+=iter2 //将iter1加上或减去iter2的运算结果赋给iter1。两个迭代器必须指向容器中的元素或超出容器末端的下一个元素
iter1-=iter2
iter1-iter2 //两个迭代器的减法,得出两个迭代器的距离。两个迭代器必须指向容器中的元素或超出容器末端的下一个元素
>,>=,<,<= //元素靠后的迭代器大于靠前的迭代器。两个迭代器必须指向容器中的元素或超出容器末端的下一个元素
4.优先对列(priority_queue)
核心:能够自动排序的队列(默认:优先级放在队首)
#include<queue>
using namespace std;
priority_queue<int> q;//默认从大到小
//更推荐以下两种写法
priority_queue<int,vector<int>,greater<int> > q; //与默认排序方式相同
priority_queue<int,vector<int>,less<int> > q;
//结构体
struct node
{
int x,y;
bool operator<(node a)
{
return x<a.x;
}
};
priority_queue<node> q;
q.size();//返回q里元素个数
q.empty();//返回q是否为空,空则返回1,否则返回0
q.push(k);//在q的末尾插入k
q.pop();//删掉q的第一个元素
q.top();//返回q的第一个元素
q.back();//返回q的末尾元素
5.向量(vector)
#include <vector>
using namespace std;
vector<int> v;
v.push_back(x) //尾部插入一个元素x
int x = v[i]; //取下表为i的元素
int Size = v.size() //向量的长度
v.clear(); //清空向量
6.集合(set&multiset)
#include <set>
#include <multiset>
using namespace std;
set<int> s;
set<int>::iterator it;//集合迭代器,用于遍历整个集合
s.begin()( s.end()) //返回指向第一个元素(最后一个)的迭代器;
erase(x) //删除集合中的元素x
erase(it)//删除迭代器为it的元素
insert(x)//插入一个元素x
重复插入的元素只算一个,不能重复
7. 关联集合(map)
#include <map>
using namespace std;
map<A, B> mp;//定义一个键值对分别为A, B(A,B为数据类型)的关联容器A是键,B是他的值
int x = mp[A];//得到键A的值
mp[A] = x;//将键A的值赋值为x