Sé que at()
es más lento que []
debido a su verificación de límites, que también se discute en preguntas similares como Vector C ++ a / [] velocidad del operador o :: std :: vector :: at () vs operador [] << ¡resultados sorprendentes! ¡5 a 10 veces más lento / más rápido! . Simplemente no entiendo para qué at()
sirve el método.
Si tengo un vector simple como este: std::vector<int> v(10);
y decido acceder a sus elementos usando en at()
lugar de []
en una situación cuando tengo un índice i
y no estoy seguro si está en los límites de los vectores, me obliga a envolverlo con try-catch bloque :
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
aunque puedo obtener el mismo comportamiento usando size()
y verificando el índice por mi cuenta, lo que parece más fácil y muy conveniente para mí:
if (i < v.size())
v[i] = 2;
Entonces mi pregunta es:
¿Cuáles son las ventajas de usar vector :: at sobre vector :: operator [] ?
¿Cuándo debería usar vector :: at en lugar de vector :: size + vector :: operator [] ?