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

Why did he use "typedef vector<double>::size_type" instead of using "int"

本文关键字:type int size double typedef vector lt 为什么 gt      更新时间:2023-10-16

我只是在学习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;

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

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

他为什么不把size声明为整数呢?

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

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

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

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

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

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

无符号积分型(通常为std::size_t

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

其次,从c++11可以使用auto specifier自动推导类型。

auto size = homework.size();

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