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