如何简洁地将默认构造的对象插入到std :: vector中

xan*_*xan 0 c++ stl c++11

所有重载都std::vector::insert()需要一个值参数,即要插入的项.但是,我的项类型很复杂,我宁愿插入一个空构造的项.也就是说,我正在寻找一种在没有类型名称重复的情况下执行以下操作的方法.

std::vector<Long_and_complicated_type_name> v;
...
v.insert(iter, Long_and_complicated_type_name());
Run Code Online (Sandbox Code Playgroud)

push_back虽然我主要感兴趣,但存在同样的问题insert.

xan*_*xan 6

std::vector方法emplaceemplace_back可以达到这一目的.

template< class... Args > 
iterator emplace( const_iterator pos, Args&&... args );
Run Code Online (Sandbox Code Playgroud)

args允许转发可以不存在

std::vector<Long_and_complicated_type_name> v;
...
v.emplace(iter);
Run Code Online (Sandbox Code Playgroud)

乃至

v.emplace_back();
Run Code Online (Sandbox Code Playgroud)


Ric*_*ges 5

其它的办法:

#include <vector>

struct supercalafragalisticexpialadocious {};

int main()
{
  std::vector<supercalafragalisticexpialadocious> v;

  v.push_back({});
}
Run Code Online (Sandbox Code Playgroud)