为什么他用"typedef vector<double>::size_type"而不是用"int"
Why did he use "typedef vector<double>::size_type" instead of using "int"
我只是在学习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_t
是sizeof
运算符以及sizeof...
运算符和alignof
运算符(由于C++11)的结果的无符号整数类型。
其次,从c++11可以使用auto specifier
自动推导类型。
auto size = homework.size();
BTW:homework.size
看起来很奇怪,你可能是指homework.size()
。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- 由于"error C4430: missing type specifier - int assumed. Note: C++ does not support default-int",我现在无法编
- 使用变换翻转地图,接收错误"type int unexpected"
- `type *var =(int)0`,法律与否
- C++ 错误"Braces around scalar initializer for type int*"
- 访问基类型数组成员(Int-to-type习惯用法)
- "a value of type " void (exeCallback::*)(int) " cannot be assigned to an entity of type " void (*)(
- 可以安全地使用静态强制转换,为每个实例使用唯一的虚拟 int type() 来提高性能
- 为什么我会收到"variable 'std::packaged_task<int> task' has initializer but incomplete type"错误
- "invalid cast from type 'const myClass' to type 'int'",如何使其有效?
- 链表函数 C++ "which is of non-class type 'int'" ?
- "Missing type specifier int assumed" C++问题
- 返回 type of const int &
- C++:"error C4430: missing type specifier - int assumed" 对于构造函数和无效声明
- type conversion-c++将int转换为char+将前导零添加到char
- 为什么 std::result_of<int(int)>::type 无效?
- C++将数组相互分配;type int*=type int有效,但int=int*无效
- "error: conversion from 'int' to non-scalar type 'COORD' requested"