Как перебрать одинаковые значения со стандартной библиотекой?

Предположим, что у меня есть вектор чего-то:

std::vector<Foo> v;

Этот вектор отсортирован, поэтому равные элементы расположены рядом друг с другом.

Каков наилучший способ получить все пары итераторов, представляющие диапазоны с равными элементами (используя стандартную библиотеку)?

while (v-is-not-processed) {
    iterator b = <begin-of-next-range-of-equal-elements>;
    iterator e = <end-of-next-range-of-equal-elements>;

    for (iterator i=b; i!=e; ++i) {
        // Do something with i
    }
}

Я хотел бы знать, как получить значения b и e в коде выше.

Так, например, если v содержит эти числа:

 index 0 1 2 3 4 5 6 7 8 9
 value 2 2 2 4 6 6 7 7 7 8

Тогда я бы хотел, чтобы b и e указывали на элементы в цикле:

 iteration  b  e
 1st        0  3
 2nd        3  4
 3rd        4  6
 4th        6  9
 5th        9 10

Есть ли элегантный способ решить эту проблему с помощью стандартной библиотеки?

39
задан JeJo 3 July 2019 в 16:18
поделиться