如何以最优雅的方式基于c ++中的对象向量初始化指针向量?

gre*_*ray 2 c++ stl initialization vector

如果有一个对象矢量,如:

vector <Obj> a;
Run Code Online (Sandbox Code Playgroud)

什么是创建向量a中对象指针向量的最佳方法?:

vector <Obj*> b;
Run Code Online (Sandbox Code Playgroud)

krz*_*zaq 5

只是用 std::transform

// if b is empty (this will append to the end of b)
b.reserve(a.size()); // optional, but a good habit
std::transform(a.begin(), a.end(), std::back_inserter(b), [](Obj& o){ return &o; });
Run Code Online (Sandbox Code Playgroud)

或者

b.resize(a.size());
std::transform(a.begin(), a.end(), b.begin(), [](Obj& o){ return &o; });
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用直接boost::transform_iterator初始化b:

auto tr = [](Obj& o){ return &o; };
std::vector<Obj*> b(
    boost::make_transform_iterator(a.begin(), tr),
    boost::make_transform_iterator(a.end(), tr)
);
Run Code Online (Sandbox Code Playgroud)

  • @AaronMcDaid也许没有调整大小,但保留可以很好. (2认同)