2D-матрица против 2D-вектора
ВСТУПЛЕНИЕ
2D-матрица, также известная как массив массивов, имеет свой размер, выделенный в начале, следовательно, это статический режим представления строки-столбца.
2D-вектор, также известный как вектор векторов, представляет собой динамически растущие массивы, в которых пользователь не определяет начальный размер того, сколько строк и столбцов будет существовать, это динамический режим представления строк и столбцов.
СОЗДАНИЕ И ВСТАВКА В 2D МАТРИЦУ
int matrix[3][4];
// Размер был выделен в начале.
Здесь количество строк = 3, а количество столбцов = 4.
Чтобы заполнить каждую строку и столбец, мы пишем код как:
for (int i = 0; i < 3; i++) // This loop is run for each row.
{
for(int j = 0; j < 4; j++) // This loop is run for each column
{
matrix[i][j] = i+j; // We are inserting (value = i+j) into i-th row & j-th column.
}
}
Мы будем проходить 0-ю строку, 1-ю строку, 2-ю строку (индексирование на основе 0) и 0-й, 1-й, 2-й, 3-й столбец соответственно для каждой строки.
Предположим, мы находимся в 1-й строке — 2-й столбец означает матрицу[1][2]поэтому, как только приведенный выше код будет выполнен, он будет иметь значение 3 (т.е. матрица[1][2] = 3).
СОЗДАНИЕ И ВСТАВКА В 2D ВЕКТОРЫ
vector < vector <int> > vec;
// Инициализация вектора векторов
Здесь мы определили, что будет вектор векторов ( 1 вектор сам по себе является динамическим массивом, поэтому вектор векторов означает список динамически растущих массивов).
vector<vector<int> > vec;
int rows = 3;
for (int i = 0; i < rows; i++) {
vector<int> v1; // Vector to store column elements
int columns = i+2; // We are adding i+2 columns in each row, hence dynamic.
for (int j = 0; j < columns; j++) {
v1.push_back(20);
}
vec.push_back(v1); // Pushing back above 1D vector to create the 2D vector.
}
Для приведенного выше кода внешний цикл выполняется 3 раза, т.е. 3 строки.
Но внутренний цикл выполняется i+2 раза, что означает
строка = 0 , столбцы = 0+2 = 2 (0-я строка имеет 2 столбца)
строка = 1, столбцы = 1+2 = 3 (1-я строка имеет 3 столбца)
строка = 2, столбцы = 2+2 = 4 (2-я строка имеет 4 столбца)
Просто для понимания цели мы вставляем значение = 20 в каждую позицию.
Основное преимущество 2d-векторов заключается в том, что вы назначаете память только в соответствии с вашими требованиями и не обязаны выделять фиксированные пространства, даже если они не требуются, в отличие от 2d-массивов, размер которых инициализирован в начале.
В приведенных выше примерах у вас теперь есть идея, что 2d-массивы означают нет. столбцов фиксируются для каждой строки, которая не соответствует двумерным векторам.