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

时间:2016-04-20 01:47:01

标签: c++ vector iterator typedef

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

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

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

2 个答案:

答案 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_tsizeof运算符以及sizeof...运算符和alignof运算符(自C ++ 11以来)的结果的无符号整数类型。

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

auto size = homework.size();

BTW:homework.size似乎很奇怪,你的意思可能是homework.size()