我有一个不属于容器的指针 vector 。如何在指针目标上使用算法。我尝试使用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.

我意识到for循环会起作用,但是这发生在很多地方,所以某种一元适配器?我找不到一个。提前致谢!

最佳答案

您可以使用Boost Indirect Iterator。当取消引用(使用operator*())时,它将应用额外的取消引用,因此最终得到迭代器引用的指针所指向的值。有关更多信息,您还可以看到this question about a dereference iterator

这是一个简单的例子:

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

07-24 14:30