c++ - vector push_back 与转发?

标签 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)... ) );
}

最佳答案

您可以使用 std::vector::emplace_back,它将使用合适的构造函数就地创建对象。这当然需要你定义这样一个构造函数。

v.emplace_back(1,2);

从 C++11 开始,每个标准容器都提供了一个类似于 emplace 的函数,它给出了上述行为。

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

关于c++ - vector push_back 与转发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15043674/

相关文章:

c++ - 如何解压缩多维 c 样式数组类型并声明 std::array 实例?

c++ - 进行少量插入时应该使用哪个 STL 容器?

c++ - 默认参数问题

c++ - 允许使用右值的地址吗?

c++ - const constexpr char* 与 constexpr char*

c++ - 零大小数组不适用于模板

c++循环缓冲区使用大磁盘文件

c++ - 编译器如何区分重载函数

c++ - 如何在函数中返回模板容器(即 vector 、列表、数组)?

c++ - 如何在 std::unordered_map 中就地构造某个类的对象?