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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Также он может быть написан следующим образом:

 std::vector  line(OTHER_NUMBER, DEFAULT_VALUE) std::vector > 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] } } 

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

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

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

 #include int main(){ int m = 2, n = 5; vector> vec(m, vector (n, 0)); return 0; } 
  • распространение данных внутри вектора
  • Вставка элементов в многомерном векторе
  • Многомерный вектор
  • Как разделить каждую строку матрицы на элементы вектора в R
  • размер и емкость вектора?
  • Самый быстрый способ найти второе (третье ...) наивысшее / наименьшее значение в векторе или столбце
  • Каков наилучший способ конкатенировать два вектора?
  • Вставка в вектор спереди
  • Объединение двух std :: векторов
  • как вы вставляете значение в отсортированный вектор?
  • std :: вектор и непрерывная память многомерных массивов
  • Interesting Posts

    Сравнение сетевых библиотек Android: OkHTTP, Retrofit и Volley

    Как привязать javadocs к зависимостям в плагине eclipse Maven, когда javadoc не привязан к зависимости

    Каковы происхождение контрольных и альт-ключей?

    Правильный способ реализации IXmlSerializable?

    Обход проблемы из-за отсутствия оператора ‘nameof’ в C # для безопасного хранения данных по типу?

    Прослушать изменения свойства зависимостей

    Как получить объект списка из firebase в android

    Разница между дисплеем: inline-flex и display: flex

    Mount cifs для 2 пользователей

    Добавить эффект пульсации на мою кнопку с цветом фона кнопки?

    Создать XML-узлы на основе XPath?

    Как скопировать / создать экземпляр производного classа из указателя в полиморфный базовый class?

    Почему не удается изменить программу по умолчанию, чтобы открыть расширение в Windows 7?

    Как разбить строку на массив символов?

    Настройка пользовательского агента java URLConnection

    Давайте будем гением компьютера.