Инициализация двумерного 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);
}


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

647   4  

4 ответов:

использовать 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));

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

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

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

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

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

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]
     }
}

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

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

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

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

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

    return 0;
}

Comments

    Ничего не найдено.