如果有一个对象矢量,如:
vector <Obj> a;
在向量a中创建指向矢量指针的最佳方法是什么?:
vector <Obj*> b;
答案 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)
);