我有两个向量a,b。我想比较它们的大小。我知道我可以使用if(a.size()> b.size())。但我的问题是,如果a或/和b的类型int的大小太大。例如,a.size()是99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999等。如何比较a和b的大小?对不起我的英文。
答案 0 :(得分:8)
矢量(或任何对象)的大小无法大于std::size_t
可表示的大小。根据定义,该类型可以存储程序可以创建的最大对象的大小。
由于std::size_t
是std::vector
(或任何其他标准库容器)size()
函数返回的类型,因此您可以安全地进行比较。
回复评论中的问题:
std::size_t
不是无限制的(在有限的计算机中,没有任何东西)。但它保证足够大,可以容纳任何物体的大小。注意特定于数组也是一个对象。 std::size_t
也不受RAM的限制,更多的是由您正在构建的平台。例子:
在普通的32位系统(例如Win32)上,地址空间为32位,最大的对象(理论上)可以占用2个 32 字节,因此{{1至少32位长。
在普通的64位系统(例如Win64)上,地址空间为64位,最大的对象可以(理论上)占用2个 64 字节,因此{{1至少64位长。
在x86实模式下,地址空间为20位,但没有对象可以占用多个段。由于段为2 16 字节,当目标平台是x86实模式时,16位足以用于std::size_t
。