vectorにおけるv[i]とv.at(i)の違い

740 ワード

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

vが空でない場合、A行とB行には何の違いもありません.vが空の場合、B行はstd::out_を放出します.of_range異常、A行の動作は定義されていません.
c++標準ではvector::operator[]を必要としません.効率のために、常に下限検査を強制すると、プログラムのパフォーマンスオーバーヘッドが増加するためです.設計vectorは内蔵配列の代わりに用いられるので,効率の問題も考慮すべきである.しかしoperator[]を使うと、自分で限界を越えるリスクを負わなければなりません.
下限チェックが必要な場合はatを使用します.