c ++ uint,unsigned int,int

时间:2010-08-23 22:08:56

标签: c++ indexing int iterator unsigned

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

  1. uintunsigned int
  2. 之间存在差异
  3. 最好使用上述类型之一,或者只使用int,因为我读到有人说编译器会更有效地处理int值,但如果我使用int我将不得不总是检查对于负面的idxs来说这很痛苦。
  4. 您认为迭代器更好吗?它比普通索引vectorx[idx]更有效吗?
  5. p.s该软件将处理大数据流程,良好的性能是必须要求的

4 个答案:

答案 0 :(得分:34)

  1. C ++没有定义uint这样的类型。这必须是“您的”类型,即您的代码或某些第三方库中定义的类型。可以猜测它与unsigned int相同。可能是unsigned long int或其他东西。无论如何,你必须自己检查一下。

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

2)如果你想在你的代码中添加一些“安全性”,那么你就可以避免肯定的负值。

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

答案 3 :(得分:0)

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