【发布时间】:2018-08-27 03:26:27
【问题描述】:
当我尝试使用 for 循环来解决问题时,我被卡住了。
这是我的简化代码:
int main(int argc, const char * argv[])
{
std::vector<int> a;
a.push_back(2333);
int n = 10, m = 10;
for(int i=0; i< -1; i++)
m--;
std::cout<<m<<endl;
for(int j=0; j<a.size()-2; j++)
n--;
std::cout<<n<<endl;
return 0;
}
显然,a.size() = 1 所以这两个结束条件应该是相同的。然而,当我在 Xcode 9.4.1 上运行我的代码时,我出乎意料,因为事实证明 m = 10
和n = 11。而且我发现得到n的值的时间比m要长很多。
为什么我会得到这样的结果?任何帮助将不胜感激。
【问题讨论】:
-
如果
a.size()是有符号类型,a.size() - 2将导致 -1。由于a.size()是无符号类型,a.size() - 2会产生一个非常大的正数。示例ideone.com/d2azlC. -
那你能告诉我为什么它会导致这么大的正数,为什么 n 仅仅等于 11?@RSahu
-
我会让人解释的。恐怕我脑子里还没有完全清楚。
-
当你遇到这样一个令人惊讶的结果时,第一步是检查你的假设。例如,添加
std::cout << a.size() - 2 <<endl;以验证它确实是-1。然后你就可以开始弄清楚为什么不是这样了。