37

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

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

ps 该软件将处理大数据处理,良好的性能是必须的

4

4 回答 4

52
  1. C++ 没有定义像uint. 这必须是“您的”类型,即在您的代码或某些第三方库中定义的类型。可以猜测它与 相同unsigned int。可能是unsigned long int虽然或别的什么。无论如何,你必须自己检查它。

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

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

于 2010-08-23T22:13:35.050 回答
3

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

于 2010-08-23T22:14:23.173 回答
2

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

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

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

于 2010-08-23T22:24:02.310 回答
0

正如其他海报所指出的那样, uint 可能是unsignedint 的 typedef 如果您使用的是Visual StudioF12 ,您可以通过在文本光标处于uint查看其定义 时快速检查该事实。

于 2016-10-06T19:20:54.187 回答