私は2つのベクトルa、bを持っています。大きさを比べてみたい。if (a.size() > b.size()) を使用できることはわかっています。しかし、私の質問は、サイズが a または/および b のタイプ int から大きすぎるかどうかです。For example, a.size() is 99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999, etc. How can I compare the sizes of a and b? 私の英語でごめんなさい。
1 に答える
ベクトル (または任意のオブジェクト) のサイズが で表現できるサイズより大きくなることはありませんstd::size_t
。その型は、定義により、プログラムが作成できる最大のオブジェクトのサイズを格納できます。
の (または他の標準ライブラリ コンテナーの)関数std::size_t
によって返される型と同様に、それらを安全に比較できます。std::vector
size()
コメントでの質問への返信:
std::size_t
無制限ではありません (有限のコンピューターでは何もありません)。ただし、可能な限りあらゆるオブジェクトのサイズを保持するのに十分な大きさであることが保証されています。配列よりも特定のイオンもオブジェクトであることに注意してください。std::size_t
また、RAM によって正確に制限されるわけではなく、構築するプラットフォームによって制限されます。例:
通常の 32 ビット システム (Win32 など) では、アドレス空間は 32 ビットであり、最大のオブジェクトは (理論的には) 2 32バイトを占めることができるため
std::size_t
、少なくとも 32 ビットの長さになります。通常の 64 ビット システム (Win64 など) では、アドレス空間は 64 ビットであり、最大のオブジェクトは (理論上) 2 64バイトを占めることができるため
std::size_t
、少なくとも 64 ビットの長さになります。x86 リアル モードでは、アドレス空間は 20 ビットですが、オブジェクトが複数のセグメントを占有することはできません。セグメントは 2 16
std::size_t
バイトなので、ターゲット プラットフォームが x86 リアル モードの場合は 16 ビットで十分です。