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++ )

                  ~ ^ ~~~~~~~~~~~~~~~~~