So che at()
è più lento che a []
causa del controllo dei confini, che è anche discusso in domande simili come C ++ Vector at / [] operator speed o :: std :: vector :: at () vs operator [] << risultati sorprendenti !! Da 5 a 10 volte più lento / veloce! . Semplicemente non capisco a cosa at()
serve il metodo.
Se ho un vettore semplice come questo: std::vector<int> v(10);
e decido di accedere ai suoi elementi usando at()
invece che []
in situazioni in cui ho un indice i
e non sono sicuro che sia nei limiti dei vettori, mi costringe a avvolgerlo con try-catch blocco :
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
anche se sono in grado di ottenere lo stesso comportamento utilizzando size()
e controllando l'indice da solo, il che sembra più facile e molto conveniente per me:
if (i < v.size())
v[i] = 2;
Quindi la mia domanda è:
quali sono i vantaggi dell'utilizzo di vector :: at over vector :: operator [] ?
Quando dovrei usare vector :: at anziché vector :: size + vector :: operator [] ?