initializing a 2D vector

2019-01-21 20:09发布

问题:

What is the difference between these two ways of declaring a 2D vector.

vector< vector<int>> a(M,N);

and

vector< vector<int>> a(M, vector<int> (N));

I have tried but I feel the first to be easy to understand.

回答1:

std::vector has a fill constructor which creates a vector of n elements and fills with the value specified. a has the type std::vector<std::vector<int>> which means that it is a vector of a vector. Hence your default value to fill the vector is a vector itself, not an int. Therefore the second options is the correct one.

std::vector<std::vector<int>> array_2d(rows, std::vector<int>(cols, 0));

This creates a rows * cols 2D array where each element is 0. The default value is std::vector<int>(cols, 0) which means each row has a vector which has cols number of element, each being 0.



回答2:

For declaring a 2D vector we have to first define a 1D array of size equal to number of rows of the desired 2D vector. Let we want to create a vector of k rows and m columns

 "vector<vector<int>> track(k);"

This will create a vector of size k. Then use resize method.

for (int i = 0; i < k; i++) {
    track[i].resize(m);

In this way you can declare a 2D vector



标签: c++ vector stl