2

vector.at(i)とはどう違いvector[i]ますか?

vector<int> myVector(6);
myVector.at(5) = 5;

また

myVector[5] = 5;

どちらも同じ結果になることはわかっていますが、どういうわけか演算子の[]方が高速です。atまた、ベクトルサイズ(境界)のチェックについて読み、範囲外エラーを返しますが、そうではあり[]ません。

ただし、割り当てようとすると次のことがわかりました。

myVector[8] = 1;

デバッグ モードでも同様の範囲外エラーが発生します。

では、 の意味はat何ですか?なぜ STL にあるのですか?

4

1 に答える 1

5

operator []forstd::vectorは、ベクトルに割り当てられているかどうかに関係なく、メモリ領域への参照を返します。メモリの未割り当て領域へのアクセスは未定義の動作ですが、それatが発生する前に例外がスローされます。@JoachimPileborg がコメントで述べたように、未指定の動作にoperator []は例外のスローが含まれます。

于 2013-07-12T22:06:34.670 に答える