Подтвердить что ты не робот

Объявление 2D вектора

В некоторых случаях работает только нижняя строка. Почему так?

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

Это работает в каждом случае.

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

Какая разница?

4b9b3361

Ответ 1

std::vector имеет конструктор заполнения, который создает вектор из n элементов и заполняет указанное значение. a имеет тип std::vector<std::vector<int>>, что означает, что он является вектором вектора. Следовательно, ваше значение по умолчанию для заполнения вектора - это сам вектор, а не int. Поэтому второй вариант является правильным.

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

Это создает массив строк * cols 2D, где каждый элемент равен 0. Значение по умолчанию std::vector<int>(cols, 0), что означает, что каждая строка имеет вектор, который имеет cols число элементов, каждое из которых равно 0.

Ответ 2

Для объявления двумерного вектора мы должны сначала определить одномерный массив размером, равным количеству строк желаемого двумерного вектора. Пусть мы хотим создать вектор из k строк и m столбцов

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

Это создаст вектор размером k. Затем используйте метод изменения размера.

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

Таким образом, вы можете объявить 2D-вектор