嗨,我有一个涉及向量和这些向量元素索引的程序,我想知道:
uint
和unsigned int
之间有什么区别?- 使用上述类型中的哪一个更好,还是只使用
int
,因为我读到一些人说编译器会更有效地处理int值,但如果我使用int
,我将不得不始终检查负索引,这很麻烦。 - 您认为迭代器更好吗?它是否比正常索引
vectorx[idx]
更高效?
p.s 软件将处理大量数据过程,并且良好的性能是必须具备的要求。
C++没有定义uint
类型。这必须是“您”的类型,即在您的代码或某个第三方库中定义的类型。可以猜测它与unsigned int
相同。但也可能是unsigned long int
或其他类型。无论如何,您都需要自行检查。
这是个人风格问题。例如,我认为必须使用无符号类型来表示自然非负值,如大小或数量。除了一些特定上下文之外,有符号类型和无符号类型之间没有性能差异。我会说,在大多数情况下,处理无符号类型会更有效率。
迭代器使实现更加通用,即您可以使用顺序访问迭代器,从而使您的实现适用于任何顺序数据结构。通过使用索引,您将在数据结构上强制执行随机访问要求,这是一个强要求。当没有真正需要时,强制执行强要求不是一个好主意。
1) uint = 无符号整数,实际上uint只是unsigned int的一个typedef(在编译时将被unsigned int替换)。
2) 如果您想向代码添加一些“安全性”,请使用uint,您肯定会避免负值。
3) 如果您按顺序运行向量,请使用迭代器,它们针对顺序循环进行了优化(它们是某种指针)。
uint
通常是一个 typedef
而不是宏定义。有符号和无符号与安全性关系不大(实际上可能会导致安全漏洞,因为无符号算术的运算规则与许多程序员的预期不同!)。 - Tyler McHenry正如其他帖子所指出的那样,uint 可能是 unsigned int 的 typedef。 如果您正在使用 Visual Studio,则可以在文本光标位于 uint 时按下 F12 快速检查该事实以查看其定义。
uint
定义为unsigned int
的速记方式。 - Youuint
这种类型,因此除非考虑特定的编译器,否则有关uint
的问题是没有意义的答案。 - AnT stands with Russiaunsigned int
或unsigned long
。至少在C++中,因为问题已经被标记,你应该使用size_t
。 - Nathan Ernstsize_t
。并不能保证size_t
的范围足以满足任何容器。只有基于数组的容器才能使用size_t
,其他容器则不行。另外,在处理标准容器时,应该使用container_type::size_type
而不是size_t
。 - AnT stands with Russia