0

私は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? 私の英語でごめんなさい。

4

1 に答える 1

8

ベクトル (または任意のオブジェクト) のサイズが で表現できるサイズより大きくなることはありませんstd::size_t。その型は、定義により、プログラムが作成できる最大のオブジェクトのサイズを格納できます。

の (または他の標準ライブラリ コンテナーの)関数std::size_tによって返される型と同様に、それらを安全に比較できます。std::vectorsize()


コメントでの質問への返信:

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 16std::size_tバイトなので、ターゲット プラットフォームが x86 リアル モードの場合は 16 ビットで十分です。

于 2013-05-17T14:49:23.420 に答える