vector中v[i]與v.at(i)的區別


void f(vector<int> &v)
{
  v[0];    // A
  v.at[0];  // B
}

如果v非空,A行和B行沒有任何區別。如果v為空,B行會拋出std::out_of_range異常,A行的行為未定義。

c++標准不要求vector<T>::operator[]進行下標越界檢查,原因是為了效率,總是強制下標越界檢查會增加程序的性能開銷。設計vector是用來代替內置數組的,所以效率問題也應該考慮。不過使用operator[]就要自己承擔越界風險了。

如果需要下標越界檢查,請使用at。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM