vector
vector的常见用途:
1.存储数据
(1)vector本身可以作为数组使用,常用于一些元素个数不确定的场合。
(2)有些场合需要根据一些条件把部分数据输出在同一行,数据中间用空格隔开。由于输出数据的个数是不确定的,为了更方便地处理最后一个满足条件的数据后面不输出额外的空格,可以先用vector记录所有需要输出的数据,然后一次性输出。
2.用邻接表存储图
使用vector实现邻接表可以让一些对指针不太熟悉的读者有一个比较方便的写法。
vector实现邻接表存储图:
如果想在邻接表同时存放边的重点编号和边权,那么可以建立结构体Node,用来存放每条边的编号和边权,代码如下:
struct Node {
int v; //边的终点编号
int w; //边权
}
这样vector邻接表中的元素类型就是Node类型,如下所示:
vector<Node> Adj[N];
如果需要添加从1号到3号顶点的有向边,边权为4,就可以定义一个Node型的临时变量temp:
Node temp;
temp.v = 3;
temp.w = 4;
Adj[1].push_back(temp);
还有更快的方法就是定义结构体Node的构造函数,代码如下:
struct Node{
int v,w;
Node(int _v,int _w) : v(_v), w(_w) {} //构造函数
}
这样就能不定义临时变量来实现加边的操作:
Adj[1].\push_back(Node(3,4));