Идея наличия внутреннего типа заключается в том, что общий код может использовать ваш класс без предварительного знания реализации. Суть в том, что существует const_iterator
и что он имеет семантику постоянного итератора. Тот факт, что вы заимствуете итератор из внутреннего типа, - это просто деталь реализации, о которой не должен заботиться вызывающий код.
То есть проблема не в том, чтобы определить внутренний тип const_iterator
, так как это увеличит связь в пользовательском коде, где им придется явно использовать std::set<T>::const_iterator
, что, в свою очередь, делает тип части-члена интерфейса (т. е. вы больше не можете изменять реализацию элемента, не нарушая пользовательский код).