声明一个新变量以与向量大小进行比较的最佳实践是什么?我们应支持以下哪一项(即双打的向量)?
executor exception code: AccessDeniedException
uint compareVar;
std::uint64_t compareVar;
std::size_t compareVar;
为什么?
答案 0 :(得分:2)
您必须使用的是std::vector::size_type
。通常为std::size_t
,但标准未指定。一个实现有可能使用另一种类型。每当您要引用std::vector
大小时,都应该使用它。
uint
,uint64_t
甚至size_t
,因为在每个实现和平台中,基础向量实现可能使用不同的类型。
答案 1 :(得分:1)
如果仅需要相等或序数比较,则最佳类型将是vector的实现所使用的类型,这意味着
std::vector<MyType>::size_type compareVar
这可以确保无论平台如何,您使用的类型都与vector的实现类型匹配。
请注意,由于类型是无符号的,因此计算向量的大小与compareVar
之间的差值时需要谨慎行事,以免从较小的值减去较大的值时出现错误的结果。
答案 2 :(得分:1)
按照“善良”的顺序:4 3 1 2。
std::vector::size_type
是一种实现定义的无符号整数类型,可以保证能够索引任何向量中的所有元素。最好使用它,因为可以保证它至少在所有情况下都与需要的大小一样大,但不必大于此大小。
std::size_t
是一个实现定义的无符号整数类型,可以保证能够表示任何对象的大小。 std::vector::size_type
通常与此相同,但是理论上不能保证。
uint
在C ++中没有这样的类型,但是我假设您的意思是unsigned
。这不能保证能够代表向量的所有索引。实际上,在普遍存在的64位系统上,unsigned
的最大可表示值通常远小于最大可能矢量。不过,如果您知道程序中的上限要小得多,那么使用此上限就可以了……只要该假设永不改变。
std::uint64_t
是一个无符号类型,尽管在64位系统和那些64位系统上可能已足够,但不能保证它不大到足以表示向量的所有索引。地址空间更小,实际上几乎覆盖了目前所有的计算机。