C ++ vector,这段代码是什么意思?

时间:2016-03-21 12:03:05

标签: c++

我有这段代码:

 const int maxnodes = 5000;
 struct Edge 
 {
   int to, rev;
   int f, cap;
 };

 vector<Edge> g[maxnodes];

这是可以理解的,但我后来看到它用作

 Edge &e = g[u][j];

这里,'u,j'是整数。什么是"g[u][j]"'g'是用'Edge'结构填充的向量,它如何像数组数组一样?

我知道Edge &e是一个参考,它正在接收一个&#39; Edge&#39;结构,但我对'g[u][j]'感到困惑。

源代码为here

提前致谢! :)

6 个答案:

答案 0 :(得分:2)

int nodes = maxnodes, src, dest;

这意味着所有都是整数,节点用maxnodes

初始化

vector<Edge> g[maxnodes]是向量数组。

Vector就像一个动态数组。 g [x]将指向一个向量。 g [x] [y]将指向边缘。

答案 1 :(得分:1)

int nodes = maxnodes, src, dest;

此处nodes, src, dest是使用nodes初始化maxnodes的所有整数。其他人未初始化。

vector<Edge> g[maxnodes];

提到的@milleniumbug g是C矢量数组:

g[u][j]将为i数组u元素提供g元素。作为ug的元素是一个向量,您可以使用[]运算符访问其成员。

答案 2 :(得分:0)

它是一个C矢量数组

maxnodes = 5的示例。 G[5]

0 -> std::vector<Edge> 
1 -> std::vector<Edge> 
2 -> std::vector<Edge> 
3 -> std::vector<Edge> 
4 -> std::vector<Edge> 

如果g的每个元素包含5个元素,它将看起来像这样

G
-
0 -> {0, 1, 2, 3, 4}
1 -> {0, 1, 2, 3, 4}
2 -> {0, 1, 2, 3, 4}
3 -> {0, 1, 2, 3, 4}
4 -> {0, 1, 2, 3, 4}

含义,g[u][j],例如g[2][3],将对应g第二个元素的向量中的第三个元素。

g[2][3]

G
-
0 -> {0, 1, 2, 3, 4}
1 -> {0, 1, 2, 3, 4}
2 -> {0, 1, 2, ***3***, 4}
3 -> {0, 1, 2, 3, 4}
4 -> {0, 1, 2, 3, 4}

答案 3 :(得分:0)

int nodes = maxnodes, src, dest;

是一个等同于这三个声明的声明

int nodes = maxnodes;
int src;
int dest;

这个

vector<Edge> g[maxnodes];

std::vector<Edge>类型的对象数组的声明。您可以将下标运算符与数组一起使用。

因此,表达式g[u]会生成索引为u的数组元素,该索引是对std::vector<Edge>类型对象的引用。

std::vector也会重载下标运算符。所以表达 g[u][j]在索引为Edge的数组的向量中为j类型的对象提供索引u

Dcelaration

Edge &e = g[u][j];

声明对Edge类型的此对象的引用。

答案 4 :(得分:0)

1)int nodes = maxnodes, src, dest;

此处,nodesint初始化,其值与maxnodes的值相同。 srcdest也是int,但没有初始值。

2)vector<Edge> g[maxnodes];

g这里是一个std::vector数组。

Edge &e = g[u][j];

Q值。什么是g[u][j]

一个。 Edge位于g行和u列的j

Q值。 g vector填充了Edge结构,它怎么能像数组一样?

一个。因为std::vector在其定义中已为自身重载operator[]。请参阅:http://en.cppreference.com/w/cpp/container/vector/operator_at

答案 5 :(得分:0)

我相信其他人已经解释了每条线路的表现。我只是指出第二行,

Edge &e = g[u][j];

代码将Edge放在g[u][j]的引用中,大概是为了使下面的代码更易于读写(而不是多次重复g[u][j])。