Tôi biết điều đó at()
chậm hơn so với []
việc kiểm tra ranh giới của nó, điều này cũng được thảo luận trong các câu hỏi tương tự như C ++ Vector ở tốc độ toán tử / [] hoặc :: std :: vector :: at () vs operator [] << kết quả đáng ngạc nhiên !! Chậm hơn 5 đến 10 lần / nhanh hơn! . Tôi chỉ không hiểu at()
phương pháp này tốt để làm gì.
Nếu tôi có một vectơ đơn giản như thế này: std::vector<int> v(10);
và tôi quyết định truy cập các phần tử của nó bằng cách sử dụng at()
thay vì []
trong trường hợp tôi có chỉ mục i
và tôi không chắc liệu nó có bị giới hạn trong vectơ hay không, nó buộc tôi phải bọc nó bằng try-catch khối :
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
mặc dù tôi có thể thực hiện hành vi tương tự bằng cách tự mình sử dụng size()
và kiểm tra chỉ mục, điều này có vẻ dễ dàng và thuận tiện hơn nhiều đối với tôi:
if (i < v.size())
v[i] = 2;
Vì vậy, câu hỏi của tôi là:
Lợi ích của việc sử dụng vector :: at over vector :: operator [] là gì?
Khi nào tôi nên sử dụng vector :: at thay vì vector :: size + vector :: operator [] ?