C のベクトル サイズの異常
C では、ベクトル コンテナーの size() メソッドはベクトル内の要素の数を返します。ただし、次のコード スニペットに示すように、ベクトルが空の場合には複雑な動作が発生します。
#include <vector> #include <iostream> using namespace std; int main() { vector<int> value; cout << value.size() << endl; // Output: 0 cout << value.size() - 1 << endl; // Output: 18446744073709551615 }
Why is the Second Output Not -1?
The最初の cout ステートメントは、ベクトルが空であることを示す 0 を正しく出力します。しかし、驚くべきことに、2 番目のステートメントは、予想される -1 ではなく、非常に大きな正の数を出力します。これは、vector::size() が size_t 型の符号なし整数を返すために発生します。名前が示すように、符号なし整数は負の数を表すことができません。
したがって、size_t 値がそれ自体から減算されると、基本的にその型で表現可能な最大値にラップアラウンドされます。この場合、size_t は通常 64 ビット整数であるため、保持できる最大値は 18446744073709551615 です。この値は、2 番目の cout ステートメントの出力として出力されます。
実行中に何が起こるか2 番目の cout?
次のシーケンス計算では 2 番目の cout の背後にある動作を説明します。
以上がC で `vector.size() - 1` が -1 を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。