如何从对象指针向量创建对象值向量?

qua*_*ant 5 c++ c++11

"天真"的解决方案是;

std::vector<T> vector_of_objects;
vector_of_objects.reserve(vector_of_pointers.size());
for (T const * p : vector_of_pointers)
    vector_of_objects.push_back(*p);
Run Code Online (Sandbox Code Playgroud)

上述内容似乎很麻烦,也许并不是很明显.

是否有一种解决方案至少效率不高,可能更快更直观?我在想C++ 11可能有一个我不知道的解决方案......

mas*_*oud 8

将所有内容写在一行中意味着更短的代码?没有.

在我看来,这两行更短更易读:

for (auto p : vector_of_pointers)

    vector_of_objects.emplace_back(*p);
Run Code Online (Sandbox Code Playgroud)

 

函数std::for_each不短于基于范围的循环,有时它由于传递lambda表达式而更大.

功能std::transform甚至更长std::for_each,但是单词transform是一个优势,可以找出下面发生的事情.

  • std :: transform的优点是它会自动为您处理预分配. (2认同)