【发布时间】:2021-09-09 12:08:52
【问题描述】:
如果输入数组为空,则array.size() 应为0。第一个for,从0 到array.size() - 1,应该意味着它从0 到-1,对吧?
那么,不应输入此 for,函数应返回 inversionsCounter 值,即 0
但这并没有发生,代码进入了一个无限循环。这是为什么呢?
代码如下:
#include <vector>
#include <iostream>
using namespace std;
int countInversions(vector<int> array)
{
int inversionsCounter = 0;
for (int i = 0; i < array.size() - 1; ++i)
for (int j = i + 1; j < array.size(); ++j)
if (array[i] > array[j])
++inversionsCounter;
return inversionsCounter;
}
int main()
{
vector<int> array = {};
cout << array.size();
cout << countInversions(array);
}
【问题讨论】:
-
我相信
array.size() - 1溢出了。 -
首先解决 : C4018: '
-
请发布导致问题的实际代码。在您发布的代码中,您根本没有调用函数
countInversions。 -
循环在技术上并不是无限的——但它会运行一段时间。
array的大小为零,因此array.size() - 1将产生std::size_t可以表示的最大值,这通常(取决于您的编译器和主机系统)相当大的值(例如4294967295在 32 位system 或18,446,744,073,709,551,615在 64 位系统上)。 -
@maverick.01:通常,您发布的代码应该能够重现该问题。为了重现问题,您的问题的读者不必考虑代码的哪些部分必须取消注释,哪些部分不需要。注释代码的第一部分必须保持停用状态并不是很明显,但注释代码的第二部分必须通过取消注释重新激活。这使您的问题更难理解。同时,其他人编辑了您的问题以解决此问题。
标签: c++ for-loop vector infinite-loop implicit-conversion