C++ 向量索引变量声明(大小或标准::向量<;数据类型>;::大小\u类型)

C++ 向量索引变量声明(大小或标准::向量<;数据类型>;::大小\u类型),c++,vector,variable-declaration,C++,Vector,Variable Declaration,声明新变量以与向量大小进行比较的最佳实践是什么?我们应该支持以下哪一项(即双倍向量) uint-compareVar std::uint64\u t compareVar std::size\u t compareVar std::vector::size\u type compareVar;//这与尺码有何不同? 为什么呢?您必须使用的是std::vector::size\u type。它通常是std::size\u t,但标准没有指定它。一个实现可能使用另一种类型。只要您想引用std::ve

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

  • uint-compareVar
  • std::uint64\u t compareVar
  • std::size\u t compareVar
  • std::vector::size\u type compareVar;//这与尺码有何不同?

  • 为什么呢?

    您必须使用的是
    std::vector::size\u type
    。它通常是
    std::size\u t
    ,但标准没有指定它。一个实现可能使用另一种类型。只要您想引用
    std::vector
    size,就应该使用它


    不得使用
    uint
    uint64\u t
    甚至
    size\u t
    ,因为在每个实现和平台中,基础向量实现可能使用不同的类型

    如果只需要相等或顺序比较,最好的类型是vector实现使用的类型,这意味着

    std::vector<MyType>::size_type compareVar
    
    std::vector::size\u类型比较器
    
    这保证了您使用的类型与vector实现的类型相匹配,而与平台无关

    请注意,由于类型是无符号的,因此计算向量大小和
    compareVar
    之间的差异需要谨慎,以避免在从较小值减去较大值时出现错误的结果。

    按“优度”顺序:4 3 1 2

    std::vector::size_type
    是一种实现定义的无符号整数类型,保证能够索引任何向量中的所有元素。使用它是很好的,因为它保证在所有情况下至少与需要的一样大,但不要求比需要的大

    std::size\t
    是一种实现定义的无符号整数类型,保证能够表示任何对象的大小
    std::vector::size_type
    通常与此相同,但这在理论上无法保证

    <>代码> UTEN>代码> C++中没有这种类型,但我假设您是“代码>未签名< /COD>。这并不能保证能够表示向量的所有索引。事实上,在普遍存在的64位系统上,
    无符号
    的最大可表示值通常远小于可能的最大向量。不过,如果您知道程序中的上限要小得多,那么使用它可能很好。。。只要这个假设永远不会改变


    std::uint64\u t
    是一种无符号类型,不能保证在所有系统上都存在,也不能保证足够大以表示向量的所有索引,尽管在64位系统和地址空间更小的系统上可能足够大,目前几乎涵盖所有计算机。

    大小取决于环境(32/64位、编译器等)。这就是标准的
    vector::size
    是如何实现的。是的,但不能保证
    std::vector::size\u type
    始终等于
    size\t
    。谢谢。但是
    size\u t
    不也是这样吗?它不也是平台独立的吗?@Bu_ali
    size\u t
    确实是平台独立的,但是
    std::vector
    的实现没有义务使用它。