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

时间:2016-11-03 12:32:18

标签: c++ vector stl initialization

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

vector <Obj> a;

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

vector <Obj*> b;

1 个答案:

答案 0 :(得分: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; });

可替代地

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

或者,您可以使用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)
);