将vector <Class*>复制/包装到vector <Class>

Com*_*g88 1 c++ pointers loops vector std

是否有一个std函数可以轻松地将类的指针向量复制到类的向量中,还是我必须手动迭代它们?

寻找具有最快/更少代码行的解决方案:).

避免复制而不泄漏内存的解决方案也受到欢迎!

mar*_*inj 6

我怀疑有这样的,下面是一个班轮用于:

  std::vector<X*> vec1 = { new X, new X };
  std::vector<X> vec2;
  vec2.reserve(vec1.size());
  for (auto p : vec1) vec2.push_back(*p);
Run Code Online (Sandbox Code Playgroud)

如果你想确保没有制作副本,那么你可以使用std :: reference_wrapper <>:

std::vector<std::reference_wrapper<X>> vec2;
for (auto p : vec1) vec2.push_back(*p);
Run Code Online (Sandbox Code Playgroud)

但是你必须确保在取消分配vec1元素后才能访问vec2的任何元素.

另一个方法就是使用unique_ptr:

std::vector<std::unique_ptr<X>> vec2;
for (auto p : vec1) vec2.emplace_back(p);
Run Code Online (Sandbox Code Playgroud)

现在你可以放弃vec1,但那么为什么不制作类型的vec1 std::vector<std::unique_ptr<X>>