相关疑难解决方法(0)

为什么在C++ 11或C++ 14中没有进驻迭代器?

C++ 98有front_inserter,back_inserterinserter,但在C++ 11或草案C++ 14中似乎没有任何这些版本.有没有我们不能有任何技术原因front_emplacer,back_emplaceremplacer

c++ iterator stl c++11 c++14

46
推荐指数
2
解决办法
4321
查看次数

使用带有std :: fill等算法的emplace

我使用的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的一部分,还有其他方法吗?

c++ stl stl-algorithm c++11

11
推荐指数
3
解决办法
4063
查看次数

标签 统计

c++ ×2

c++11 ×2

stl ×2

c++14 ×1

iterator ×1

stl-algorithm ×1