我正在学习C ++而我正在使用Accelerated C ++。
在向量示例中,编写器使用以下代码;
typedef vector<double>::size_type vec_sz;
vec_sz size = homework.size;
我知道typedef vector<double>::size_type vec_sz;
是这样的,他不必将下一个命令写为vector<double>::size_type size = homework.size;
,但我的问题是他为什么不将size
声明为整数而不是?
int size = homework.size;
这是因为我们正在使用矢量吗?
如果是这样,这是否意味着向量迭代器返回的值不能存储在常规变量中?
答案 0 :(得分:7)
为什么他没有将大小声明为整数?
因为整数不是存储矢量大小的正确类型,原因有两个:
int
被允许为否定;向量的大小是非负的int
也可能不足以容纳最大矢量大小 int
适用于小向量,但对于一般方法,您应该使用vector<T>::size_type
。请注意,该类型是无符号的,因此在通过索引迭代回到前面时需要小心。
这是否意味着向量迭代器返回的值不能存储在常规变量中?
迭代器不是vector<T>::size_type
类型,它是完全独立的数据类型。
答案 1 :(得分:5)
首先,std::vector::size_type
不是int
。
无符号整数类型(通常为
std::size_t
)
和
std::size_t
是sizeof
运算符以及sizeof...
运算符和alignof
运算符(自C ++ 11以来)的结果的无符号整数类型。
其次,从c ++ 11开始,您可以使用auto specifier
自动推断出类型。
auto size = homework.size();
BTW:homework.size
似乎很奇怪,你的意思可能是homework.size()
。