这个for循环总是立即崩溃:
for (auto i = v.size() - 1; i >=0; --i);
Run Code Online (Sandbox Code Playgroud)
显然,我在循环中有一整堆代码,而v是双精度矢量.我试图以相反的顺序迭代它们.
这里发生了什么?
for (auto i = v.size() - 1; i >=0; --i);
Run Code Online (Sandbox Code Playgroud)
看看vector :: size()方法 - 它通常返回unsigned int(在奇怪的平台上它可能是其他无符号类型)!所以你的i变量将具有无符号类型.
当你的循环进入步骤i == 0时它将减少它并且i将具有值2^32 - 1 == UNSIGNED_INT_MAX(或者如果你在奇怪的平台上工作则为其他正值 - 请参见平台上的vector :: size_type以查看基础类型).所以它永远不会小于0,它永远不会停止你的循环.我想当它变得如此之大,它崩溃因为它超出了范围,但我没有看到完整的代码确定.
看到这里 - 查找size_typetypedef - 它表示无符号类型.
您可能想要使用反向迭代器(请参阅@ NathanOliver的响应),尽管我不是很喜欢它们的简单循环.
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |