Al iterar sobre un contenedor estándar, ¿cree que es una buena idea omitir el prefijo std::
y confiar en ADL para encontrar la definición? Ejemplo:Confiando en ADL para std :: begin() y std :: end()?
std::vector<int> vec = get_vec();
// range-based for loop would be preferred here, but just for the sake of example
for (auto it = begin(vec), end = end(vec); it != end; ++it) { /*...*/ }
¿Hay alguna razón para hacer o no hacer esto?
¿Qué hay de malo con '.begin()' y '.end()' (que, FYI, ¿qué base de rango se usa aquí, no 'std :: begin' y' std :: end')? –
No tengo nada en contra. Sin embargo, recuerdo una diapositiva de Herb Setter que nos dice que preferimos las funciones gratuitas sobre las funciones de inicio/final de miembro. – StackedCrooked
@ R.MartinhoFernandes: Porque std :: begin() y std :: end() funcionan en matrices (así como en contenedores estándar (u otros objetos para los que ha escrito especializaciones)). Por lo tanto, puede cambiar el tipo subyacente de un vector sin tener que modificar ningún otro código. –