Gemäß Why was pair range access removed from C++11? können Sie einen Adapter verwenden, z. die as_range
an der akzeptierte Antwort, boost::make_iterator_range
, oder schreiben Sie Ihre eigene:
template<typename It> struct range {
It begin_, end_;
It begin() const { return begin_; }
It end() const { return end_; }
};
template<typename It> range<It> as_range(const std::pair<It, It> &p) {
return {p.first, p.second};
}
auto rng = std::equal_range(v.begin(),v.end(),1984);
for(const auto& elem: as_range(rng))
...
Der Grund, warum dies nicht anwendbar ist im Allgemeinen ist, dass pro Alastair Meredith's paper, der Algorithmen,
mismatch
und partition_copy
Rückkehr ein Paar Iteratoren aus verschiedenen Bereichen;
minmax
gibt ein Objektpaar zurück, das möglicherweise gar kein Iterator ist, und wenn es keine gibt, gibt es keine Garantie, dass sie einen Bereich bilden;
minmax_element
kann einen Bereich zurück, aber es kann auch einen umgekehrten Bereich (zB auf einem Reverse-sortierten Bereich minmax_element
zurück {prev(last), first}
zurückkehren;.
equal_range
garantierte eine Reihe zurück
Können Sie Boost verwenden? – inf
Wenn Sie Boost verwenden können, hat Boost einen Bereichsiterator. – OmnipotentEntity
ja ich kann, und ich mache :) <3 boost – NoSenseEtAl