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

Инициализация двухмерного std::vector

Итак, у меня есть следующее:

std::vector< std::vector <int> > fog;

и я инициализирую его очень наивно, как:

    for(int i=0; i<A_NUMBER; i++)
    {
            std::vector <int> fogRow;
            for(int j=0; j<OTHER_NUMBER; j++)
            {
                 fogRow.push_back( 0 );
            }
            fog.push_back(fogRow);
    }

И он чувствует себя очень неправильно... Есть ли другой способ инициализации такого вектора?

4b9b3361

Ответ 1

Используйте конструктор std::vector::vector(count, value), который принимает начальный размер и значение по умолчанию:

std::vector<std::vector<int> > fog(
    A_NUMBER,
    std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value

Если для другого значения, например, 4, требовалось значение другого нуля, то:

std::vector<std::vector<int> > fog(
    A_NUMBER,
    std::vector<int>(OTHER_NUMBER, 4));

Следует также упомянуть, что в С++ 11 введена единая инициализация, которая позволяет инициализировать vector и другие контейнеры, используя {}:

std::vector<std::vector<int> > fog { { 1, 1, 1 },
                                    { 2, 2, 2 } };

Ответ 2

В std::vector нет метода append, но если вы хотите создать вектор, содержащий A_NUMBER векторы int, каждый из которых содержит other_number нули, вы можете сделать это:

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER));

Ответ 3

Допустим, вы хотите инициализировать 2D-вектор m * n с начальным значением 0

мы могли бы сделать это

#include<iostream>
int main(){ 
    int m = 2, n = 5;

    vector<vector<int>> vec(m, vector<int> (n, 0));

    return 0;
}

Ответ 4

Общий синтаксис, как показано на рисунке:

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE))  

Здесь вектор 'v' может быть визуализирован как двумерный массив со строками 'A_NUMBER', со столбцами 'OTHER_NUMBER' с начальным значением, установленным в 'DEFAULT_VALUE'.

Также это можно записать так:

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE)
std::vector<std::vector<int> > v(A_NUMBER, line)

Ввод значений в двухмерном векторе аналогичен вводу значений в двухмерном массиве:

for(int i = 0; i < A_NUMBER; i++) {
     for(int j = 0; j < OTHER_NUMBER; j++) {
         std::cin >> v[i][j]
     }
}

Примеры уже были указаны в других ответах....!

Ответ 5

Я думаю, что самый простой способ сделать это:

std::vector<std::vector<int>>v(10,std::vector<int>(11,100));

10 - это размер внешнего или глобального вектора, который является основным, а 11 - размер внутреннего вектора типа int, а начальные значения инициализируются равными 100! Это моя первая помощь в стеке, думаю, кому-то это поможет.