矢量push_back与转发?

时间:2013-02-23 17:57:18

标签: c++ c++11 std

我在我的代码中做了类似的事情

S s;
s.a=1
s.b=2
v.push_back(s)

既然C ++有转发,我可以写一些像

这样的东西
v.push_back(1,2)

fyi visual studio支持转发,因为以下工作符合预期

//http://herbsutter.com/gotw/_102/
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}

2 个答案:

答案 0 :(得分:5)

您可以使用std::vector::emplace_back,它将使用拟合构造函数创建对象。这当然要求您定义了这样的构造函数。

v.emplace_back(1,2);

从C ++ 11开始,每个std-container都提供了类似于emplace的函数,它可以提供上述行为。

兼容性 - 注意:MSVC可能不支持这一点,因为它只支持CTP中的可变参数模板,它不影响标准库,而gcc的libstd ++仍然缺少关联容器中的emplace成员函数。

答案 1 :(得分:2)

push_back不支持转发,但新的emplace_back支持转发。

但是,push_back支持初始化列表:

v.push_back({1,2});