Вы не можете использовать += 2
с этим итератором, потому что в общем случае увеличение итератора std::list<>
на произвольное значение является относительно неэффективной операцией.+=
не определен для вашего типа итератора специально для того, чтобы помешать вам небрежно / неосознанно использовать эту неэффективную операцию в вашем коде.Вместо этого, если вы действительно хотите это сделать, вы должны использовать std::advance
, которая представляет собой функцию «красного флага», предназначенную для того, чтобы подчеркнуть тот факт, что вы, вероятно, делаете что-то неэффективное.std::advance
в основном предназначен для создания эскизов кода или для резервного кода, который вряд ли будет выполнен *.Вы не должны безвозмездно использовать std::advance
в рабочем коде.Если вы вдруг обнаружите, что полагаетесь на std::advance
, это означает, что вам, вероятно, нужно изменить структуру данных.По сути, std::advance
похоже на приведение - избегайте его, если только у вас нет очень-очень веской причины его использовать.
В качестве альтернативы вы можете использовать std::next
it = std::next(it, 2);
Эта функциягораздо проще в использовании, чем std::advance
.По умолчанию эта функция предназначена для продвижения итератора на 1 шаг вперед, но вы можете указать второй параметр, чтобы переместить его дальше.Опять же, когда значение второго параметра является непостоянным и потенциально большим, его следует рассматривать как функцию «красного флага».Постоянное значение 2 определенно находится в допустимых пределах.