Por que "! =" É usado com iteradores em vez de "<"?

Estou acostumado a escrever loops assim:

for (std::size_t index = 0; index < foo.size(); index++)
{
    // Do stuff with foo[index].
}

Mas quando vejo loops de iterador no código de outras pessoas, eles ficam assim:

for (Foo::Iterator iterator = foo.begin(); iterator != foo.end(); iterator++)
{
    // Do stuff with *Iterator.
}

Encontro oiterator != foo.end() estar offputting. Também pode ser perigoso seiterator é incrementado em mais de u

Parece mais "correto" usariterator < foo.end(), mas nunca vejo isso em código real. Por que não

questionAnswers(2)

yourAnswerToTheQuestion