可能重复:
When to use std::size_t?
您好。
假设使用模式相同(即没有负数),最好用于各种索引,int
或size_t
类型?
两者之间在64位Intel上的体验是否存在性能差异?
谢谢
答案 0 :(得分:11)
size_t
是在使用相对泛型数组时应该用于数组索引的类型。即当你只有一个抽象char
s,int
或其他东西的数组时。
当您使用特定的数组时,即包含特定于您的应用程序的某些元素的数组时,您通常应该已经有一个“选择类型”来计算或索引实体的实体在您的应用程序中键入。这是你应该使用的类型。例如,如果某个数组包含公司员工的记录,那么您的程序中应该已经有一个“选择类型”,用于指定“员工数量”。这是您应该用于索引员工记录数组的类型。它可以是unsigned int
,也可以是employee_count_t
或类似的东西。为此目的使用裸size_t
是设计错误。
另请注意,size_t
是一种不是立即用于数组索引的类型。它是一种用于表示程序中最大对象大小的类型。它通过传递性对数组“起作用”:数组是对象,因此size_t
总是足以索引数组。但是,在设计程序时,根据通用容器进行思考更有意义,而不是考虑特定的数组。今天它可能是一个数组,明天你可能不得不切换到链表或树。在一般情况下,size_t
的范围不足以表示抽象容器中的元素数,这就是为什么在这种情况下size_t
不是一个好的选择。
答案 1 :(得分:5)
这取决于你在做什么。如果要迭代向量,则使用std :: size_t:
for (std::size_t i = 0; i < vec.size(); i++) {
// do something with vec[i]
}
但是,请注意编码错误,例如:
for (std::size_t i = 99; i >= 0; i--) {
// This is an infinite loop
}
如果您只是在进行循环,那么由于上述情况,您可能只想使用普通的int。使用int和std :: size_t之间应该没有性能差异。如果你需要一个确切的大小,那么你应该既不使用int也不使用size_t,而是使用stdint.h中定义的类型。
答案 2 :(得分:1)
在您暗示的意义上,类型没有区别,通常int
是32位,size_t
是平台字的宽度(32-64位)。我建议您在处理文件,缓冲区以及可能描述内存区域或缓冲区的任何其他内容时使用size_t
。
此外,您应该注意int是有符号的,而size_t不是。
最后,历史上使用了int
,现在应该使用size_t
。但是int
仍有用于其他目的。
答案 3 :(得分:1)
size_t
或ptrdiff_t
。 int
可能不足以访问数组的所有元素。