繁体   English   中英

向量索引变量声明(size_t 或 std::vector<DATATYPE> ::尺码​​类型)

[英]Vector index variable declaration (size_t or std::vector<DATATYPE>::size_type)

声明新变量以与向量大小进行比较的最佳做法是什么? 我们应该支持以下哪一项(即双打向量)?

  1. uint compareVar;
  2. std::uint64_t compareVar;
  3. std::size_t compareVar;
  4. std::vector<double>::size_type compareVar; // how is this different than size_t?

为什么?

您必须使用的是std::vector::size_type 它通常是std::size_t但标准没有指定它。 一个实现可能使用另一种类型。 每当您想引用std::vector大小时,都应该使用它。

uintuint64_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM