小编rec*_*onn的帖子

我可以通过元素的完美转发来列表初始化 std::vector 吗?

我注意到当移动更适用时,std::vector 的聚合 列表初始化执行复制初始化。同时,多个 emplace_backs 做我想做的。

我只能想出这个编写模板函数的不完美解决方案init_emplace_vector。不过,它仅适用于非显式单值构造函数。

template <typename T, typename... Args>
std::vector<T> init_emplace_vector(Args&&... args)
{
  std::vector<T> vec;
  vec.reserve(sizeof...(Args));  // by suggestion from user: eerorika
  (vec.emplace_back(std::forward<Args>(args)), ...);  // C++17
  return vec;
}
Run Code Online (Sandbox Code Playgroud)

我真的需要使用 emplace_back来尽可能有效地初始化 std::vector 吗?

// an integer passed to large is actually the size of the resource
std::vector<large> v_init {
  1000,  // instance of class "large" is copied
  1001,  // copied
  1002,  // copied
};

std::vector<large> …
Run Code Online (Sandbox Code Playgroud)

c++ vector perfect-forwarding c++11 list-initialization

14
推荐指数
1
解决办法
283
查看次数