Avatar ·

Quais as vantagens do std::distance sobre a subtração de iteradores em C++?

Olá, colegas! Recentemente comecei a estudar C++ e me deparei com um ponto interessante ao trabalhar com iteradores. Suponha que eu tenha um std::vector v = {10, 20, 30, 40, 50}; e queira encontrar a distância entre dois iteradores, por exemplo, do início ao meio. Eu sei que para iteradores de acesso aleatório (como os do vector) posso simplesmente subtrair um iterador do outro: auto mid = v.begin() + 2; ptrdiff_t dist = mid - v.begin(); // dist = 2. Isso funciona e parece muito simples. Mas no código de outros desenvolvedores, frequentemente vejo o uso de std::distance: auto dist = std::distance(v.begin(), mid);. E não entendo por que usar uma função se posso simplesmente subtrair? Afinal, a subtração é mais curta e, provavelmente, mais rápida? Entendo que std::distance é uma função template do cabeçalho . Mas quais são suas reais vantagens? É mais segura? Funciona com outros containers onde não há subtração? Ou é apenas uma questão de estilo? Agradeceria uma explicação com exemplos, especialmente se mostrar com