Наличие абстракции, которая инкапсулирует пару итераторов, очень полезно. Стандартная библиотека использует<std::pair>в некоторых обстоятельствах, но этот класс является громоздким для использования, потому что нам нужно указать два аргумента шаблона, и для всех целей алгоритма диапазона мы должны обеспечить, чтобы два аргумента шаблона были одинаковыми. Более того,<std::pair<iterator,iterator>>вряд ли является самодокументирующим, в то время как более конкретные доменные имена классов. Поэтому эти два класса предоставляются:
- Класс<
iterator_range>
- Класс<
sub_range>
- Функция<
combine>
- Функция<
join>
Класс<iterator_range>формируется наитераторе поворота впереди должен использоваться всякий раз, когда требуется достаточно общий код. Класс<sub_range>формируется напереднем диапазоне, и он менее общий, но немного проще в использовании, поскольку его аргумент шаблона легче указать. Однако самое большое различие заключается в том, что<sub_range>может распространять константу, потому что он знает, что такое соответствующая<const_iterator>.
Оба класса могут использоваться в качестве диапазонов, поскольку они реализуют минимальный интерфейс, необходимый для автоматической работы.