C++向量,这段代码是什么意思
C++ vector, what does this code mean?
我有这个代码:
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
是一个参考,它正在接收一个"Edge
"结构,但我对'g[u][j]'
感到困惑。
源代码在这里
提前感谢!:)
int nodes = maxnodes, src, dest;
这意味着所有节点都是整数,并且节点使用 maxnode 初始化
vector<Edge> g[maxnodes]
是向量数组。
矢量就像一个动态数组。g[x] 将指向一个向量。g[x][y] 将指向一个边。
int nodes = maxnodes, src, dest;
这里nodes, src, dest
都是整数,其中nodes
初始化maxnodes
其他整数未初始化。
vector<Edge> g[maxnodes];
正如@milleniumbug
提到的g
是一个向量的 C 数组:
g[u][j]
将给出数组g
的第u
个元素的第i
个元素。u
g
元素是一个向量,您可以在其中使用 []
运算符访问其成员。
1) int nodes = maxnodes, src, dest;
在这里,nodes
是一个初始化int
,其值与 maxnodes
的值相同。 src
和dest
也是int
,但没有初始值。
2) vector<Edge> g[maxnodes];
g
这里是一系列std::vector
.
Edge &e = g[u][j];
问。什么是g[u][j]
?
一个。它是存储在第 u
行和第 j
列的g
中的Edge
。
问。 g
vector
填充了Edge
结构,它怎么能像数组一样工作?
一个。因为std::vector
在其定义中operator[]
超载。参考: http://en.cppreference.com/w/cpp/container/vector/operator_at
它是一个向量的 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}
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]
在具有索引 u
的数组向量中给出索引为 Edge
的对象,其索引为 j
。
双屏
Edge &e = g[u][j];
声明对类型 Edge
的此对象的引用。
我相信其他人已经解释了每行做得好的地方。我只是在第二行指出,
Edge &e = g[u][j];
该代码将Edge
放在引用中的g[u][j]
,大概是为了使以下代码更易于读取和写入(而不是多次重复g[u][j]
)。
- 获取英特尔 Kaby Lake 架构上最后一级高速缓存未命中计数的确切代码是什么?
- 这行代码是什么意思
- 此练习的C 代码是什么
- c++ 中的代码是什么意思
- 这个代码是什么意思 std::vector<cv::P oint2f> points[2]
- 这一小堆代码是什么意思
- C++向量,这段代码是什么意思
- 在 c++ 中加减分数的代码是什么
- 验证给定C++编译器是否将源代码读取为 C++11 的快速简单代码是什么?
- DllMain 中钩子回调函数的入口代码是什么
- static_cast<T* 易失性*> - 此代码是什么意思?
- 任务杀死实用程序的退出代码是什么
- GCC 发出的 vtable 汇编代码中的那两个长代码是什么?
- 这C++代码是什么意思?'const ResTable&res = am->getResources();'
- 这个Python切片语句的C++等效代码是什么
- 在链表形成中,在开头添加变量的代码是什么
- MinGW .exe 需要一些 gcc dll 的,不管代码是什么?
- &x 输出到控制台的代码是什么?
- 类型铸造?样板这行cpp代码是什么
- 这行代码是什么意思*((int*)(0))=1;