Я прочитал статью Инициализация вектора векторов, имеющих фиксированный размер с бустом что должно точно соответствовать моим требованиям: инициализировать матричный вектор вектора, который может быть произвольно расширен в обоих направлениях (я хочу использовать его для извлечения и группировки выбора значений из большего списка).
Однако решение, данное в первых 2 ответах
vector<vector<int>> v(10, vector<int>(10,1));
запрашивает синтаксическую ошибку в моем CDT_eclipse и следующую ошибку от моего компилятора:
error: expected identifier before numeric constant
vector <vector <int> > v(10, vector <int>(10,1));
—
Версия найдена в вектор вектора — специфический синтаксис работает для моего затмения:
vector<vector<int>> v = vector<vector<int>>(n, vector<int>(n, 0));
Однако он выдает предупреждение от моего компилятора:
vector warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [...]
Изменение версии компилятора (gcc 5.4.0 20160609 для Ubuntu 5.4.0-6ubuntu1 ~ 16.04.10) невозможно в общей схеме, где предполагается использовать мой код. Поэтому мне нужна совместимая формулировка упомянутой выше команды. Большое спасибо!
РЕДАКТИРОВАТЬ: две мои основные попытки выглядели так:
vector <vector <int> > v(10, vector <int>(10,1)); --> syntax error
vector <vector<int> > v = vector <vector<int> >(1, vector<int>(1, 0)); --> compiler error
Здесь я угадаю, что вы забыли сообщить нам, что пытаетесь объявить элемент данных для класса. Итак, вы действительно пытаетесь скомпилировать что-то вроде:
struct A {
vector <vector <int> > v(10, vector <int>(10,1));
};
а также
struct A {
vector <vector<int> > v = vector <vector<int> >(1, vector<int>(1, 0));
};
Член данных может быть инициализирован только в определении класса знаком равенства или фигурными скобками. Инициализация с круглыми скобками не допускается.
Пытаться:
struct A {
vector<vector<int>> v{10, vector<int>(10,1)};
};
В любом случае вам нужен как минимум C ++ 11 для инициализации фигурной скобки, а также инициализация нестатического члена в объявлении (ваша вторая ошибка, где вы используете равенства вместо скобок, но со старым стандартом C ++).
Других решений пока нет …