带有签名vs.s的嵌套循环unsigned int

时间:2014-09-14 00:32:35

标签: c++ loops unsigned signed

任何人都知道为什么在i的第一次迭代中,(即外循环),没有通过 内循环?

想:也许它可能与signed iunsigned j

有关

代码:

template <class T>
Matrix<T> LinearEquations<T>::backSubstitution(Matrix<T>& a, Matrix<T>& b){

    Matrix<T> s(b);
    for(signed i = a.getRows()-1; i > -1; --i){
        //cout << "Debug: i = " << i << endl;
        //if(i == a.getRows()-1) continue;
        for(unsigned j = i+1; j < a.getRows(); ++j){
            //cout << "Debug: i = " << i << ", j = " << j << endl;
            s(i, 0) = s(i, 0) - (a(i, j) * s(j, 0));
        }
        //cout << "Debug: Hello world" << endl;
        s(i, 0) = s(i, 0) / a(i, i);
        //cout << "Debug: i = " << i << endl;
        //cout << "Debug: Hello world" << endl;
    }
    return s;
}

2 个答案:

答案 0 :(得分:2)

考虑你的代码:

for(signed i = a.getRows()-1; i > -1; --i){
    for(unsigned j = i+1; j < a.getRows(); ++j){

在第一次迭代期间,j将设置为a.getRows()-1+1。显然,a.getRows() < a.getRows()并不成立,因此内循环的主体不会被执行。

答案 1 :(得分:0)

假设a.getRows()返回3。然后i2开头。然后j3开头。由于测试条​​件最初为假,循环for (j = 3; j < 3; ++j)执行零次。

类似的逻辑适用于其他值,除非a.getRows() - 1超出signed int的范围。