Как использовать std ::vector и std ::array одновременно?

#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);