如何将STL算法与指针向量一起使用

Nei*_*l G 12 c++ lambda boost stl c++11

我有一个不是容器所有的指针向量.如何在指针的目标上使用算法.我尝试使用boost的ptr_vector,但它会在超出范围时尝试删除指针.

以下是一些需要工作的代码:

vector<int*> myValues;
// ... myValues is populated
bool consistent = count(myValues.begin(), myValues.end(), myValues.front()) == myValues.size();
auto v = consistent ? myValues.front() : accumulate(myValues.begin(), myValues.end(), 0) / myValues.size();
fill(myValues.begin(), myValues.end(), v);
// etc.
Run Code Online (Sandbox Code Playgroud)

我意识到for循环可以工作,但这发生在一堆地方,所以某种一元的适配器?我找不到一个.提前致谢!

Luc*_*lle 19

您可以使用Boost Indirect Iterator.当取消引用(with operator*())时,它会应用额外的解除引用,因此最终得到迭代器引用的指针指向的值.有关更多信息,您还可以查看有关取消引用迭代器的此问题.

这是一个简单的例子:

std::vector<int*> vec;

vec.push_back(new int(1));
vec.push_back(new int(2));

std::copy(boost::make_indirect_iterator(vec.begin()),
          boost::make_indirect_iterator(vec.end()),
          std::ostream_iterator<int>(std::cout, " "));     // Prints 1 2
Run Code Online (Sandbox Code Playgroud)