开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
问题(Question):
我本来以为auto可以这样用,不过这种情况似乎不太适用??
我想要全程使用auto帮我推导,不过vector的size是unsigned我直接这样用有问题
以我的范例难道我还是只能自己指定j的型态嘛(int)
有比较正确auto的方式嘛??感觉都会推导错误??
预期的正确结果(Expected Output):
test 1
test 0
错误结果(Wrong Output):
无穷循环
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> ans = {1,2,3};
auto n = ans.size();
for(auto j = n - 2;j >= 0;
因为 auto 会导致他是 unsigned,0-1不会是负数,导致你的循环条件永远成立,所以会是无穷循环或者你循环条件也可以改成 j < j + 1
作者: aiwhat 2021-11-03 00:38:00
unsigned 和 signed 变量比较时会转型成 unsignedvector::size 回传 unsigned → j = n - 2 也是 unsigned
作者:
peter98 (新兵)
2021-11-03 03:04:00Size() returns unsigned
作者:
chchwy (mat)
2021-11-03 09:54:00自动推导的j是无号数阿 无号数怎么可能会小于零呢?所以你的for loop条件永远都成立 无法离开回圈
作者:
KevinR (Kevin)
2021-11-03 13:57:00推导错误X 你用错○
借串问,好奇对于这种unsigned然后往下数的状况通常for里面会怎么写?
1.你如果不知道型态 最好不要用auto2. 你如果不知道发生什么事 最好也不要讲推导错误
感谢以上各位大大~其实我是想问这有没有较好的写法还是就真的不知道size的型态不要随便用auto...Orz
作者:
ketrobo (猫萝卜)
2021-11-04 00:01:00不知道就学一下const iterator,粉好用
我的话 觉得auto拿来接iterator可以少打字 lol
作者: NciscalA 2021-11-04 09:28:00
for_each + reverse iterator
万一是需要index呢?该不会用rev iter+额外index吧?
作者:
chchwy (mat)
2021-11-05 07:30:00真的要往下数...就用int啊,不要auto推导就好了
作者:
firejox (Tangent)
2021-11-05 10:35:00不要滥用auto 就解决了type information很好用 除非真的很有帮助 (e.g. itererator type name 很长) 最好都直接写type name
作者:
Dracarys (MayShowGunMore)
2021-11-07 23:45:00它照你打的执行没有错啊 unsigned没问题 推导没有错
作者: alex780312 (Alex) 2021-11-09 07:37:00
同一行就知道型态时可以auto一下,例如auto ptr =make_unique<MyClass>(…);我是建议不要自己把size_t和unsigned 互换,是长度就维持size_t。甚至要用using MyNumber = int;的方式确保不会让所有函数都吃最基本形态而看不出是啥东西。早起的NULL 变成现在nullptr 也是一个可以学习的例子形态名字太长可以用using改善,auto是避免冗余描述,例如使用template 时的例子
作者:
Dracarys (MayShowGunMore)
2020-01-11 08:56:00