也许是这样的?
template<typename BidirectionalIterator, typename UnaryPredicate>
pair<BidirectionalIterator,BidirectionalIterator>
magical_range_search(BidirectionalIterator begin,
BidirectionalIterator end, UnaryPredicate p)
{
return {find_if(begin,end,p),
find_if(make_reverse_iterator(end),make_reverse_iterator(begin),p)};
}
但是,当然,就整个事情而言,你可以
std::unique
用一个
reverse_iterator
,如注释所示:
heavyContainer.erase(heavyContainer.begin(),
unique(make_reverse_iterator(heavyContainer.end()),
make_reverse_iterator(heavyContainer.begin()),
[](Heavy const&lhs, Heavy const&rhs) {
return lhs.getLight() < rhs.getLight();
}).base());
在这里
reverse_iterator<>::base()
返回
reverse\u迭代器
返回人
unique()
. 像
唯一()
返回序列的新结束,反向操作返回序列的新开始。新范围为
{new_begin, orignal_end}
,以及范围中的元素
{original_begin, new_begin}
必须是
erase()
d