Заказываются только итераторы произвольного доступа. std::list
итераторы - это только двунаправленные итераторы, поэтому они не поддерживают operator<
или operator>
.
Вместо этого вы могли бы провести сравнение с !=
.
while (itSmallFamily != itLargeFamily)
Вы должны убедиться, что итераторы не перепрыгивают друг на друга, чтобы это работало. То есть, если itSmallFamily
находится только на один шаг от itLargeFamily
, вы просто поменяете их и они никогда не будут равны друг другу.
Вместо этого вы можете использовать std::vector
, чьи итераторы являются итераторами произвольного доступа. Кроме того, std::array
и std::deque
также поддерживают произвольный доступ.