向量索引变量声明(size_t或std :: vector <DATATYPE> :: size_type)

时间:2019-12-19 18:08:26

标签: c++ vector variable-declaration

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

  1. executor exception code: AccessDeniedException
  2. uint compareVar;
  3. std::uint64_t compareVar;
  4. std::size_t compareVar;

为什么?

3 个答案:

答案 0 :(得分:2)

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

不得使用

uintuint64_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位系统上可能已足够,但不能保证它不大到足以表示向量的所有索引。地址空间更小,实际上几乎覆盖了目前所有的计算机。