0

我有两个向量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. 根据定义,该类型可以存储程序可以创建的最大对象的大小。

与's(或任何其他标准库容器)函数std::size_t返回的类型一样,您可以安全地比较它们。std::vectorsize()


回复评论中的问题:

std::size_t不是无限的(在有限的计算机中,什么都不是)。但它保证足够大以容纳任何可能的对象的大小。注意 ion 比数组更特殊也是一个对象。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 回答