Wiem, że at()
jest to wolniejsze niż []
ze względu na sprawdzanie granic, które jest również omawiane w podobnych pytaniach, takich jak C ++ Vector at / [] operator speed lub :: std :: vector :: at () vs operator [] << zaskakujące wyniki !! 5 do 10 razy wolniej / szybciej! . Po prostu nie rozumiem, do czego ta at()
metoda jest dobra.
Jeśli mam prosty wektor taki jak ten: std::vector<int> v(10);
i decyduję się uzyskać dostęp do jego elementów za pomocą at()
zamiast []
w sytuacji, gdy mam indeks i
i nie jestem pewien, czy jest w granicach wektorów, zmusza mnie to do owinięcia go try-catch blok :
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
chociaż jestem w stanie uzyskać to samo zachowanie, używając size()
i sprawdzając indeks samodzielnie, co wydaje mi się łatwiejsze i znacznie wygodniejsze:
if (i < v.size())
v[i] = 2;
Więc moje pytanie brzmi:
jakie są zalety używania vector :: at over vector :: operator [] ?
Kiedy powinienem używać vector :: at zamiast vector :: size + vector :: operator [] ?