Как пройти по элементам от начального до конечного итератора, включая конечный?

Есть два константных итератора (возврат std::multimap::equal_range), первый из которых указывает на начало последовательности (первый элемент), второй на последний элемент (не на end, а именно на последний существующий элемент, с которым тоже необходимо работать).

Вопрос: как в цикле пройтись по всем элементам, включая тот, на который указывает последний итератор?

Классический вариант

for (std::multimap<T1, T2>::const_iterator i = range.first; i != range.second; ++i)
        // do stuff

где range – значение, возвращённое std::multimap::equal_range – пара константных итераторов. Не работает, т.к. не захватывает тот самый последний элемент, на который указывает range.second. Цикл идёт ДО него, но НЕ ВКЛЮЧАЯ его.

Итак, снова вопрос, более точно: как, желательно не костыльно, пройти с помощью представленных итераторов по всем элементам, включая тот, на который указывает последний итератор?

P.S. Использую C++ ДО 11ого стандарта (С++ 2003 вроде). Убедительно прошу не предлагать сменить стандарт на более новый, даже если это чем-то поможет, т.к. не имею такой возможности.

Используется Visual Studio 2008 SP1 на Windows 10 x64.


Ответы (0 шт):