**
关于整型数据减去vector对象长度size()时发生的溢出现象
**
做pat时发现一个点老是超时,题目的时间复杂度也不高,感觉很奇怪。
将感觉不对劲的地方放到DEV里才知道了缘由。
发现:
如果一个整型数据减去一个大于自身的vector对象的长度
/如:a - vector.size() 注:a < vector.size()/
所得结果会变得超级大 这里直接上代码解释
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int>temp(10);
int a=2;
cout<<a-temp.size();
}`
正常结果应该是-8
但是实际上是 如下
之后又尝试了别的类型数据
发现 double,float 类型数据所得结果是正常的
而 char,long long 类型数据还是会发生溢出(可能是溢出吧。。)
/
(分割线)
第二次编辑
原来vector . size( )是一种八字节的无符号类型unsign int 64
其优先级在 int 之上 double 之下
与 int 型数据一起运算时发生类型转换,int 转换为vector . size() 的类型(unsign int 64);
故会出现溢出
所得数据和2^64高度相近即可证明这一点
而与double类型一起运算则会转换为double型
变为有符号64位整型
故不会溢出