C++ 程序导致无限循环
这是有问题的节目。为什么它会导致无限循环C++ 程序导致无限循环,c++,stl,C++,Stl,这是有问题的节目。为什么它会导致无限循环 #include <vector> #include <iostream> using namespace std; class Workshop { public: int pictureFrames( vector<int> pieces ); }; int Workshop::pictureFrames( vector<int> pieces ) { int count = 0;
#include <vector>
#include <iostream>
using namespace std;
class Workshop
{
public:
int pictureFrames( vector<int> pieces );
};
int Workshop::pictureFrames( vector<int> pieces )
{
int count = 0;
for ( int i = 0 ; i < pieces.size() - 2 ; i++ )
{
for ( int j = i + 1; j < (pieces.size() - 1) ; j++ )
{
for ( int k = j + 1; k < (pieces.size()); k++ )
{
bool possible = (pieces[i] + pieces[j] > pieces[k]) &&
(pieces[j] + pieces[k] > pieces[i]) &&
(pieces[k] + pieces[i] > pieces[j]);
if ( possible )
count++;
}
}
}
return count;
}
void main()
{
Workshop w;
vector<int> pieces;
pieces.push_back( 100 );
w.pictureFrames( pieces );
}
#包括
#包括
使用名称空间std;
班级工作坊
{
公众:
int pictureFrames(向量片段);
};
int Workshop::pictureFrames(矢量片段)
{
整数计数=0;
对于(int i=0;i个数[k])&&
(件[j]+件[k]>件[i])&&
(件[k]+件[i]>件[j]);
如果(可能的话)
计数++;
}
}
}
返回计数;
}
void main()
{
车间w;
向量块;
件。推回(100);
w、 图片照片(件);
}
向量的size()
方法返回size\t
,这是一种无符号类型。当您使用值为1
的无符号类型并从中减去2时,您将得到一个非常大的数字
如果将以下行放在pictureFrames
方法中,您将观察到循环执行时间为何如此之长
cout << pieces.size() - 2 << endl;,
cout您是否尝试过使用完整诊断编译它
请看这里:
main.cpp:15:25:警告:比较不同符号的整数:“int”和“unsigned long”[-Wsign compare]
对于(int i=0;i
[内部循环重复两次,并抱怨void main()
]
这些诊断很有启发性
int
被提升为unsigned long
(或任何size\u t
大小),并与pieces.size()-2
进行比较,后者由于模运算非常大,在将来,通过突出显示代码并按CTRL+K
或缩进四个空格来格式化代码。不要在每一行周围加上背景标记。其次第三,由于您使用的是Visual Studio,请利用内置的调试工具(即设置断点)查看程序中的错误所在。您是否尝试过调试它?您自己尝试过解决这个问题吗?我建议将调试打印输出放在适当的位置请参见:
main.cpp:15:25: warning: comparison of integers of different signs: 'int' and 'unsigned long' [-Wsign-compare]
for ( int i = 0 ; i < pieces.size() - 2 ; i++ )
~ ^ ~~~~~~~~~~~~~~~~~