Я не до конца понимаю, почему приращение работает, а умножение - нет.
Краткий ответ: для итераторов определен оператор приращения (++
), умножения - нет t.
Длинный ответ
Операции над итератором не являются алгеброй, где позиция begin()
имеет значение 1
.
Итератор - это эволюция указателя, это число, представляющее позицию в памяти, и в первом приближении (также во втором приближении с std::vector
s) вы можете рассуждать, считая итератор указателем.
Предположим, что begin()
возвращает 1000 и что размер Struct_variant
равен 10
(законченные выдуманные числа).
С помощью variant_itr++
вы увеличиваете значение указателя (итератора), что is (указатель арифмети c) вы получаете не 1001 (1000 плюс 1), а 1010, то есть позицию для следующего Struct_variant
.
Если вы применяете приращение 5 раз (например), Вы получаете указатель в позиции 1050
, а не 1005.
Учитывая этот тип арифметики c, совершенно не имеет смысла умножение.
И не определено.