2016-12-15 10 views
1
vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input[-1] <<endl; 

介しベクトルの負の屈折率を、結果がされるアクセス:入力をインデックス-1であること:0 しかし、我々はfollwoing使用する場合:オペレータ[]及び.AT()のコードの上に使用

vector<int> input = {1, 2, 3, 4, 17, 117, 517, 997}; 
cout<< "input vector at index -1 is: " << input.at(-1) <<endl; 

結果は次のようになります。 インデックス-1での入力は次のとおりです。libC++ abi.dylib:タイプstd :: out_of_range:vectorのキャッチされていない例外で終了します。

私に理由を説明できる人がいますか?ありがとうございました。

答えて

7

atメンバーは範囲チェックを行い、適切に応答します。

operator []はありません。これは未定義の動作で、コードにバグがあります。

これはドキュメントに明示されています。

+0

どのようなバグがありますか教えてください。すべての入力ベクトルのようですが、演算子[]を使用すると-1のインデックスは常に0になります。 – Feng

+1

@FengZhouそれはあなたがその位置で「0」を見るのは偶然です。それは依然として違法な声明です。あなたはベクトルの内容の外を見ています。あなたが見ることができないコンテンツには、「0」が含まれています。 –

+0

ありがとうございます。ええ、それは私が推測する偶然の一致です。 – Feng

2

最初は未定義の動作です。なんでも起こる可能性がある。あなたは何が起こっても、不平を言うことは許されません。

2番目の例外はスローされ、キャッチしないので、std::terminate()が呼び出され、プログラムが終了します。終わり。

関連する問題