Инициализация двумерного 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);
}
и это кажется очень неправильным... Есть ли другой способ инициализации вектора, как это?
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