std::vector::insert()
的所有重载都需要一个值参数,即要插入的项。但是,我的项类型很复杂,我宁愿插入一个空构造的项。也就是说,我正在寻找一种方法来执行以下操作,而不需要重复类型名称。
std::vector<Long_and_complicated_type_name> v;
...
v.insert(iter, Long_and_complicated_type_name());
push_back
存在同样的问题,但我主要对insert
感兴趣。
答案 0 :(得分:5)
std::vector
方法emplace
和emplace_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({});
}