Как инициализировать const int 2-мерный вектор в C ++ - PullRequest
3 голосов
/ 14 декабря 2011

Как инициализировать двухмерный вектор const int:

Const int vector < vector < int > >  v ? 

v = {1 , 1 ; 1, 0}  ?

не работает.

Ответы [ 3 ]

6 голосов
/ 14 декабря 2011

Вы можете сделать это ( только в C ++ 11 ):

const vector<vector<int>>  v{{1,2,3},{4,5,6}};

Также обратите внимание, что вам не нужно писать > >.Поскольку эта проблема была исправлена ​​в C ++ 11, >> будет работать.Он не будет интерпретироваться как оператор правого сдвига (как в случае с C ++ 03).

5 голосов
/ 14 декабря 2011

Если ваш компилятор поддерживает функцию списка инициализации (так она называется?) C ++ 11, вы можете сделать это:

const vector<vector<int>> v {
    { 1, 2, 3 },
    { 4, 5, 6 }
};

Обратите внимание, что вы не сможете добавить какие-либо элементы в первое измерение (но вы можете добавить элементы во второе), например,

v.push_back(vector<int> { 8, 9, 10 }); // BAD
v[0].push_back(4); // OK

Если бы вы хотели, чтобы второе измерение было неизменяемым, вы бы сделали

vector<const vector<int>> {
    { 1, 2, 3 },
    { 4, 5, 6 }
};

Тогда

v.push_back(const vector<int> { 8, 9, 10 }); // OK
v[0].push_back(4); // BAD

ИЛИ если вы хотите, чтобы сами элементы были const, вы бы сделали

vector<vector<const int>> {
    { 1, 2, 3 },
    { 4, 5, 6 }
};

Тогда

v.push_back(vector<const int> { 8, 9, 10 }); // OK
v[0].push_back(4); // OK
v[0][0] = 2; // BAD

Возможно, вы захотите изменить его во время выполнения, так что, вероятно, неплохо удалить const в целом.

0 голосов
/ 14 декабря 2011
using namespace std;

int main(void){

    const vector< vector<int> > v(10, vector<int>(10,1));

    return 0;

}

Инициализирует массив 10x10 в 1

...