为什么他使用"typedef vector <double> :: size_type"而不是使用"int"

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)

这是因为我们正在使用向量吗?

如果是这样,这是否意味着向量迭代器返回的值不能存储在常规变量中?

das*_*ght 7

为什么他只是将大小声明为整数?

因为整数不是存储矢量大小的正确类型,原因有两个:

  • int允许是否定的; 矢量的大小是非负的
  • 即使是无符号int也可能不足以保持最大矢量大小

int适用于小向量,但对于一般方法,你应该使用vector<T>::size_type.请注意,该类型是无符号的,因此在按索引迭代到前面时需要小心.

这是否意味着向量迭代器返回的值不能存储在常规变量中?

迭代器不是类型vector<T>::size_type,它是完全独立的数据类型.


son*_*yao 5

首先,std::vector::size_type不是int.

无符号整数类型(通常std::size_t)

std::size_tsizeof运算符以及sizeof...运算符和alignof运算符的结果的无符号整数类型(自C++ 11起).

其次,从c ++ 11开始,您可以使用auto specifier自动推断类型.

auto size = homework.size();
Run Code Online (Sandbox Code Playgroud)

BTW:homework.size看起来很奇怪,你可能会说homework.size().