【问题标题】:c++ uint , unsigned int , int时间:2019-05-10 标签:c++uint,unsignedint,int
【发布时间】:2011-04-02 21:34:47
【问题描述】:

您好,我有一个程序处理大量向量和这些向量元素的索引,我想知道:

  1. uintunsigned int有区别吗
  2. 最好使用上述类型之一或只使用int,因为我读到有人说编译器确实更有效地处理int值,但如果我使用int,我将不得不始终检查负idxs是痛苦。
  3. 您认为迭代器更好吗?是不是比普通索引vectorx[idx]效率更高?

p.s 该软件将处理大数据处理,必须具备良好的性能

【问题讨论】:

    标签: c++ indexing int iterator unsigned


    【解决方案1】:
    1. C++ 没有定义像uint 这样的类型。这必须是“您的”类型,即在您的代码或某个第三方库中定义的类型。可以猜到它与unsigned int 相同。可能是unsigned long int 或其他。无论如何,你必须自己检查。

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

    3. 迭代器使实现更加通用,即您可以使用顺序访问迭代器,从而使您的实现适用于任何顺序数据结构。通过使用索引,您对数据结构施加了随机访问要求,这是一个很强的要求。在没有真正需要时强加严格的要求并不是一个好主意。

    【讨论】:

    • @AndreyT:我不知道,但我正在使用 netbeans , GCC 编译器,并且我已经使用 uint 编写了代码,并且它在没有任何库的情况下工作。 2&3 点非常丰富,非常感谢:)
    • uint 是大多数编译器对unsigned int 的简写。
    • 在任何情况下,它都不会改变这样一个事实,即在 C 和 C++ 中都没有 uint 这样的类型,所以除非考虑到特定的编译器,否则关于 uint 的问题没有有意义的答案。
    • @AndreyT,我还要补充一点,在处理容器大小时,您不应该使用unsigned intunsigned long。至少在 C++ 中,当问题被标记时,您应该使用size_t
    • @Nathan Ernst:不正确。你说的是一般的容器,对吧?一般情况下,您应该从不size_t 与容器一起使用。不能保证size_t 的范围对于任何容器都足够。 size_t 仅适用于基于数组的容器,但请注意其他方面。此外,在处理标准容器时,您应该使用container_type::size_type 而不是size_t
    【解决方案2】:

    如果您按顺序循环遍历向量,请务必使用迭代器。无论索引类型如何,都有与索引相关的开销,这可以通过迭代来避免。

    【讨论】:

      【解决方案3】:

      1) uint = unsigned int,实际上uint只是unsigned int的一个typedef(编译时会被unsigned int代替)。

      2) 如果您想在代码中添加一些与 uint 相关的“安全性”,您肯定会避免使用负值。

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

      【讨论】:

      • 对于否决票来说还不够糟糕,但uint 通常是typedef,而不是宏,并且签名与未签名与安全性关系不大(如果有的话,它可能会导致安全错误,因为无符号算术的工作方式与许多程序员的预期不同!)
      • 你是对的 typedef (我会修改它)安全,我的意思是程序员的安全感,与编译器无关,这就是为什么我把“”跨度>
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-15
        • 2020-10-01
        • 2015-06-14
        • 2011-07-08
        • 2012-02-03
        • 2017-04-15
        • 2021-07-31
        • 2016-01-27
        相关资源
        最近更新 更多