Я использовал vector::emplace_back
, чтобы избежать создания временных объектов при заполнении вектора. Здесь у вас есть упрощенная версия:
class Foo {
public:
Foo(int i, double d) : i_(i), d_(d) {}
/* ... */
};
std::vector<Foo> v;
v.reserve(10);
for (int i = 0; i < 10; i++)
v.emplace_back(1, 1.0);
Но вместо этого я хотел использовать std::fill_n
:
v.reserve(10);
std::fill_n(std::back_inserter(v), 10, Foo(1, 1.0));
Таким образом, временные копии будут созданы. Я не знаю, как использовать emplace
в этой ситуации. Думаю, мне понадобится что-то вроде std::back_emplacer
, но я не мог найти такого. Является ли эта часть С++ 11, но еще не реализована в GCC? Если это не часть С++ 11, есть ли другой способ сделать это?