C++ 98有front_inserter,back_inserter和inserter,但在C++ 11或草案C++ 14中似乎没有任何这些版本.有没有我们不能有任何技术原因front_emplacer,back_emplacer和emplacer?
我使用的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);
Run Code Online (Sandbox Code Playgroud)
但我想std::fill_n改用:
v.reserve(10);
std::fill_n(std::back_inserter(v), 10, Foo(1, 1.0));
Run Code Online (Sandbox Code Playgroud)
通过这种方式,将创建临时副本.我不知道emplace在这种情况下如何使用.我想我需要类似的东西std::back_emplacer,但我找不到这样的东西.这是C++ 11的一部分,但还没有在GCC中实现?如果它不是C++ 11的一部分,还有其他方法吗?