#c #visual-c #c 11 #stl
#c #visual-c #c 11 #stl
Вопрос:
Я использую что-то вроде этого:
std::vector<std::array<double, 3>> myarray;
но когда я хочу добавить новые элементы в массив, я пытаюсь использовать
myarray.push_back({0, 0 ,0});
Он не компилируется с VS2012.
Итак, как я могу использовать std::array в качестве элемента std::vector?
Спасибо.
Комментарии:
1.
std::vector
не имеетpushback
члена. Пожалуйста, опубликуйте реальный код.2. Вы пропускаете
_
серединуpush_back
. В противном случае некоторые лучшие компиляторы принимают этот код.3. Компилируется в ideone.com/xUZmpw
4. -2? В этом вопросе нет ничего плохого. OP определяет компилятор и отправляет sscce. Проблема сводится к компилятору, который маскируется под совместимый с C 11, но в нем отсутствуют многие функции.
5. @Bathsheba (я не голосовал) Это не sscce . В нем была опечатка, и в нем по-прежнему отсутствуют includes и функция. Кроме того, AFAIK MSVC — один из очень немногих компиляторов, который не претендует на роль компилятора C 11 (значение __cplusplus), я не знаю, почему вы называете это маскарадом.
Ответ №1:
Боюсь, вам не повезло: VS2012 не поддерживает инициализацию фигурных скобок.
Обратите внимание, что ваш код действителен на C 11.
Комментарии:
1. Спасибо. но как я могу добавить элемент типа std::array в std::vectort в VS2012
2. A
std::array
, в отличие от обычных массивов, может быть скопирован как одно значение. Объявите локальную переменную типаstd::array
и передайте ееpush_back
.
Ответ №2:
Я уверен, что отсутствующее _ в push_back было опечаткой.
Проблема в VS2012. Используйте VS2013 или компилятор, поддерживающий C 11, или явно инициализируйте новый элемент.
Ответ №3:
Вы должны сделать это длинным путем.
std::array<double, 3> a; // Maybe you can use brace initialization here? Not sure
a[0] = 1;
a[1] = 5;
a[2] = 0;
myarray.push_back(a);