如图, nums 是一个 vector 的容器,它里面只有一个值,也就是说他的 size 是 1 ;那么问题来了,为什么把他减到负数,他就变成一堆乱的数字了?求解
如图, nums 是一个 vector 的容器,它里面只有一个值,也就是说他的 size 是 1 ;那么问题来了,为什么把他减到负数,他就变成一堆乱的数字了?求解
|
messyideaMay 23, 2016
1
num.size() 是一个 unsigned int
|
|
hxndgMay 23, 2016
2
@messyidea 实际上我看这个问题的时候第一反应也是 unsigned int ,转换的问题了,但是问题是为什么数字这么大呢?实际上-1 转成 unsigned int 时输出的是 4294967295 ;复现 lz 程序发现我这里输出也是他那个 18 几几几
|
|
messyideaMay 23, 2016
6
@hxndg 不太清楚,我随便弄了一个 size 为 1 的数组,在 linux , g++上编译是 4294967295 ,编译器不同可能也有关系。也许 vc++为了提醒用户所以返回了乱码。
|
|
publicID002May 23, 2016 via Android
9
@messyidea 是 std::size_t ,具体是什么类型由编译器决定,只是可能是 unsigned int
|
|
messyideaMay 24, 2016
10
@publicID002 恩。谢提醒。还没对 STL 深究过(
|
|
htfy96May 24, 2016 via Android
11
@publicID002 是 typename vector<int>::size_type 。。。
|
|
hxndgMay 24, 2016
12
@publicID002 万分感谢 stl 深入剖析都是供着。。。没看过。。。
|
|
ryd994May 24, 2016
13
因为 size_t 一般是 unsigned long
|
|
soliMay 24, 2016
14
这不是一个 C++ 的问题。是个 C 的问题。
|
|
publicID002May 24, 2016
15
@htfy96 感谢指正。本来我看几年前的资料还说两个一定相同,今天去查标准就找不到相关的规定了,看来不知道什么时候改过了 orz...
|