C++ c++;uint,unsigned int,int

C++ c++;uint,unsigned int,int,c++,indexing,int,iterator,unsigned,C++,Indexing,Int,Iterator,Unsigned,嗨,我有一个程序,处理很多向量和这些向量元素的索引,我想知道: uint和unsigned int 使用上述类型中的一种更好,或者只使用int,因为我读到一些人说编译器处理int值的效率更高,但如果我使用int,我将不得不始终检查负IDX,这很痛苦 你认为迭代器更好吗?它是否比普通索引更有效 p、 s该软件将处理大型数据处理,必须具备良好的性能 C++没有定义像uint这样的类型。这必须是“您的”类型,即在您的代码或某些第三方库中定义的类型。可以猜测它与unsigned int相同。可以是无符号

嗨,我有一个程序,处理很多向量和这些向量元素的索引,我想知道:

  • uint
    unsigned int
  • 使用上述类型中的一种更好,或者只使用
    int
    ,因为我读到一些人说编译器处理int值的效率更高,但如果我使用
    int
    ,我将不得不始终检查负IDX,这很痛苦
  • 你认为迭代器更好吗?它是否比普通索引更有效
  • p、 s该软件将处理大型数据处理,必须具备良好的性能

  • C++没有定义像
    uint
    这样的类型。这必须是“您的”类型,即在您的代码或某些第三方库中定义的类型。可以猜测它与
    unsigned int
    相同。可以是
    无符号长整型
    尽管或其他。不管怎样,你得自己检查一下

  • 这是个人风格的问题。一、 例如,我们认为必须使用无符号类型来表示自然的非负值,如大小或数量。除了一些特定的上下文之外,有符号类型和无符号类型在性能上没有区别。我想说的是,在大多数情况下,处理无符号类型的效率更高

  • 迭代器使实现更通用,即您可以使用顺序访问迭代器,从而使您的实现适用于任何顺序数据结构。通过使用索引,您可以对数据结构施加随机访问要求,这是一个很强的要求。在没有实际需求的情况下强加强需求不是一个好主意


  • 如果要按顺序遍历向量,请务必使用迭代器。无论索引类型如何,索引都会带来开销,这可以通过迭代避免。

    1)uint=unsigned int,实际上uint只是unsigned int的typedef(编译时将被unsigned int替换)

    2) 如果您想在代码中添加一些与uint相关的“安全性”,那么一定要避免负值


    3) 如果您按顺序运行向量,使用迭代器,它们针对顺序循环进行了优化(它们是某种指针)。

    正如其他海报所指出的,uint可能是无符号的int的typedef
    如果您使用的是Visual Studio,则可以在文本光标位于
    uint
    中查看其定义时,通过按
    F12
    快速检查该事实

    @AndreyT:我不知道,但是我使用的是netbeans,GCC编译器,我已经用uint编写了代码,而且它在没有任何libs的情况下工作。2和3点是非常翔实的,谢谢:“代码> Uint < /C>是大多数编译器的代码,简称为<未签名的INT/C>”。在任何情况下,都不会改变这样的事实:在C和C++中都没有“<代码> Uint < /代码>这样的类型,所以除非考虑到特定的编译器,关于
    uint
    的问题没有有意义的答案。@AndreyT,我还要补充一点,在处理容器大小时,您不应该使用
    unsigned int
    unsigned long
    。至少在C++中,问题是加标签的,你应该使用<代码> siZixt < /Cord>。@ Nathan Ernst:不是真的。你说的是集装箱,对吗?一般情况下,您不应在容器中使用
    size\t
    。无法保证
    size\t
    的范围足以容纳任何容器<代码>大小\u t仅适用于基于数组的容器,但不适用于其他容器。另外,在处理标准容器时,您应该使用
    container\u type::size\u type
    而不是
    size\u t
    。这还不足以进行否决表决,但
    uint
    通常是
    typedef
    ,而不是宏,签名与未签名与安全性几乎没有关系(如果有什么可能会导致安全性错误,因为无符号算术的工作方式与许多程序员预期的不同!)你对typedef(我将修改它)的安全性是正确的,我指的是程序员的安全感,与编译器无关,这就是为什么我把“”