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

时间:2016-08-18 19:00:58

标签: c++ c++11 stl

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

std::vector<Long_and_complicated_type_name> v;
...
v.insert(iter, Long_and_complicated_type_name());

push_back存在同样的问题,但我主要对insert感兴趣。

2 个答案:

答案 0 :(得分:5)

std::vector方法emplaceemplace_back可用于此目的。

template< class... Args > 
iterator emplace( const_iterator pos, Args&&... args );

转发的args可以不在,允许

std::vector<Long_and_complicated_type_name> v;
...
v.emplace(iter);

甚至

v.emplace_back();

答案 1 :(得分:4)

另一种方式:

#include <vector>

struct supercalafragalisticexpialadocious {};

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

  v.push_back({});
}