C++ vector, what does this code mean?

前端 未结 6 1132
谎友^
谎友^ 2021-01-23 22:27

I have this code:

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

 vector g[maxnodes];

This is qui

相关标签:
6条回答
  • 2021-01-23 23:00

    I believe others have already explained what each line does well. I'm just pointing out that in the second line,

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

    the code places the Edge at g[u][j] in a reference, presumably, to make the following code easier to both read and write (instead of repeating g[u][j] multiple times).

    0 讨论(0)
  • 2021-01-23 23:06

    It is a C-array of vectors

    Example with maxnodes = 5. G[5]

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

    If each element of g contains 5 elements, it would look like this

    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}
    

    Meaning, g[u][j], for example with g[2][3] would correspond to the third element in the vector at the second element of 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}
    
    0 讨论(0)
  • 2021-01-23 23:07

    1) int nodes = maxnodes, src, dest;

    Here, nodes is an int initialized with the value same as that of maxnodes. src and dest are also int, but with no initial value.

    2) vector<Edge> g[maxnodes];

    g is here an array of std::vector.

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

    Q. What is g[u][j]?

    A. It is the Edge stored in g at the uth row and jth column.

    Q. g is vector filled with Edge struct, how can it be act like a array of arrays?

    A. Because std::vector has operator[] overloaded for itself in its definition. Refer: http://en.cppreference.com/w/cpp/container/vector/operator_at

    0 讨论(0)
  • 2021-01-23 23:11
    int nodes = maxnodes, src, dest;
    

    Here nodes, src, dest are all integers where nodes is initialized with maxnodes others are not initialized.

    vector<Edge> g[maxnodes];
    

    As @milleniumbug mentioned g is a C array of vectors:

    g[u][j] will give i th element of u th element of array g. As u the element of g is a vector where you can access its members using [] operator.

    0 讨论(0)
  • 2021-01-23 23:18

    int nodes = maxnodes, src, dest;

    This means all are integer and nodes is initialized with maxnodes

    vector<Edge> g[maxnodes] is the array of vector.

    Vector is like a dynamic array. g[x] will be pointing to a vector. g[x][y] will point to a Edge .

    0 讨论(0)
  • 2021-01-23 23:18

    This

    int nodes = maxnodes, src, dest;
    

    is a declaration that is equivalent to these three declarations

    int nodes = maxnodes;
    int src;
    int dest;
    

    This

    vector<Edge> g[maxnodes];
    

    is a declaration of an array of objects of type std::vector<Edge>. You can use the subscript operator with arrays.

    So expression g[u] yields the element of the array with index u that is a reference to an object of type std::vector<Edge>.

    Class std::vector also overloads the subscript operator. So expression g[u][j] gives the object of type Edge with index j in the vector of the array with index u.

    Dcelaration

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

    declares a reference to this object of type Edge.

    0 讨论(0)
提交回复
热议问题