[英]Vector index variable declaration (size_t or std::vector<DATATYPE>::size_type)
声明新变量以与向量大小进行比较的最佳做法是什么? 我们应该支持以下哪一项(即双打向量)?
uint compareVar;
std::uint64_t compareVar;
std::size_t compareVar;
std::vector<double>::size_type compareVar; // how is this different than size_t?
为什么?
您必须使用的是std::vector::size_type
。 它通常是std::size_t
但标准没有指定它。 一个实现可能使用另一种类型。 每当您想引用std::vector
大小时,都应该使用它。
uint
、 uint64_t
甚至size_t
不能使用,因为在每个实现和平台中,底层向量实现可能使用不同的类型。
如果您只需要相等或序数比较,最好的类型是 vector 的实现所使用的类型,这意味着
std::vector<MyType>::size_type compareVar
这保证了无论平台如何,您使用的类型都与向量实现的类型相匹配。
请注意,由于类型是无符号的,因此计算向量大小和compareVar
之间的差异时需要谨慎,以避免从较小值中减去较大值时出现错误结果。
按照“善良”的顺序:4 3 1 2。
std::vector::size_type
是一个实现定义的无符号整数类型,保证能够索引任何向量中的所有元素。 最好使用它,因为它保证至少与所有情况下所需的一样大,但不需要比这更大。
std::size_t
是一个实现定义的无符号整数类型,保证能够表示任何对象的大小。 std::vector::size_type
通常与此相同,但这在理论上并不能保证。
uint
C++ 中没有这样的类型,但我假设您的意思是unsigned
。 这不能保证能够表示向量的所有索引。 事实上,在无处不在的 64 位系统上, unsigned
最大可表示值通常远小于最大可能向量。 尽管如此,如果您知道程序中的上限要小得多,那么使用它可能没问题……只要这个假设永远不会改变。
std::uint64_t
是一种无符号类型,不能保证在所有系统上都存在,也不能保证足够大以表示向量的所有索引,尽管它可能在 64 位系统和那些地址更小的系统上就足够了空间,它基本上涵盖了目前几乎所有的计算机。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.