各种容器

这些都是C++的

1.vector,动态数组

使用要包括头文件

#include<vector>

vector 的基本操作有:

定义一个vector:vector<容器存的类型(可以是结构体)> v(这个容器的名称);
判断是否空:v.empty(); //为空则返回真
从尾部插入数据:v.push_back(a);//a指数据
从中间插入数据: v.insert(v.begin()+i,a);//在第i+1个元素前面插入a;
要访问里面的元素,和数组一样,v[0],v[1];
vector的大小:v.size();
要删除数据: v.pop_back() //删除最后一个
v.erase(v.begin()+i);//删除第i+1个元素
v.erase(v.begin()+i,v.end()+j);//删除区间[i,j-1];
清空vector:v.clear();
对vector进行排序:sort(v.begin(),v.end(),cmp);可以直接用sort函数,或者加cmp比较条件
将元素翻转,即逆序排列:reverse(vec.begin(),vec.end());//也要#include
begin()与end()函数、front()与back()的用法
front(),back()就是第一个和最后一个元素,begin(),end()是首位地址;

vector<char> v1;
	vector<char>::iterator iter1;
	vector<char>::iterator iter2;
	v1.push_back('m');
	v1.push_back('n');
	v1.push_back('o');
	v1.push_back('p');
	cout << "v1.front() = " << v1.front() << endl;
	cout << "v1.back() = " << v1.back() << endl;
	iter1 = v1.begin();
	cout << *iter1 << endl;
	iter2 = v1.end()-1; //注意v1.end()指向的是最后一个元素的下一个位置,所以访问最后一个元素
                        //的正确操作为:v1.end() - 1;
	cout << *iter2 << endl;

输出结果:
v1.front() = m
v1.back() = p
m
p

2.stack,栈;

存放图

包括头文件:

#include<stack>

stack 的基本操作有:

定义一个stack:stack<容器存的类型(可以是结构体)> v(这个容器的名称);
判断是否空:v.empty(); 堆栈为空则返回真
删除元素:v.pop(); 移除栈顶元素
增加元素:v.push(x); 把x加入栈顶元素
stack大小:v.size(); 返回栈中元素数目
要最上面的元素:v.top(); 返回栈顶元素

3,queue,队列fifo

存放图

注意:队列不可以用sort

先进先出,在bfs的时候需要用

包括头文件:

#include <queue>

queue 的基本操作有:
定义一个queue:queue<容器存的类型(可以是结构体)> v(这个容器的名称);
入队,如例:v.push(x); 将x 接到队列的末端。
出队,如例:v.pop(); 弹出队列的第一个元素。
访问队首元素,v.front(); 即最早被压入队列的元素。
访问队尾元素,v.back(); 即最后被压入队列的元素。
判断队列空,v.empty(); 当队列空时,返回true。
访问队列中的元素个数v.size();

还有一个双向队列deque

用法相似,但是他是可以从两头进两头出
push_front(x):双端队列头部增加一个元素X
push_back(x):双端队列尾部增加一个元素x
pop_front():删除双端队列中最前一个元素
pop_back():删除双端队列中最后一个元素
clear():清空双端队列

4.优先队列

优先队列是你设定好判断条件后,在加入元素的时候就会自动排序,可以有相同的元素,(这点和map不一样)

这种操作同queue

此处指的基本数据类型就是 int 型,double 型,char 型等可以直接使用的数据类型,优先队列对他们的优先级设置一般是数字大的优先级高,因此队首元素就是优先队列内元素最大的那个(如果是 char 型,则是字典序最大的)。

 //下面两种优先队列的定义是等价的
    priority_queue<int> v;
    priority_queue<int,vector<int>,less<int> > v;//后面有一个空格

其中第二个参数( vector ),是来承载底层数据结构堆的容器,第三个参数( less ),则是一个比较类,less 表示数字大的优先级高,而 greater 表示数字小的优先级高。

由小到大

 priority_queue<int,vector<int>,greater<int> >v;

结构体的排序

struct node {     
  int x, y;     
  friend bool operator < (node a, node b)     
  {         
    return a.x > b.x;    //结构体中,x小的优先级高 
                                            //不难理解,定义的是小于号,而返回的是x大的就是真,说明x越大 就越小    
  }
};
priority_queue<node> v;   //定义方法

操作:
返回最前面的歌:v.top();
弹出最前面的:v.pop();
压入队列:v.push(x);
判断是否空:v.empty();
返回元素数目:v.size();

5.map

map是一种映射关系,有两个东西,一个是关键字,一个是值,它是按照关键字排序的顺序

要包括头文件#include<map>
定义map :map<int,string> v;//在这里是以第一个来排序的,映射值是string,都是以第一个为关键字,这两种是可以换的
插入元素:v.insert(make_pair(key,value));//key和value都是类型名
查找或者遍历的时候要用一个迭代器:map<key,value>::iterator it;//it是迭代器名称
遍历的方法:for(it i:v) cout<<i.first<<" "<<i.second;
查找某一个key值有没有出现:it=v.find(x);//x是查找的x值
如果找到了,那么它的就变成那个元素,负责就变成v.end()也就是空;
第一个值是it->first,第二个值是it->second;
容器里的头元素是v.begin();
容器的尾巴是v.end();

posted @ 2018-11-10 23:31  一无所知小白龙  阅读(325)  评论(0编辑  收藏  举报