C++ 程序似乎跳过了内部for循环

C++ 程序似乎跳过了内部for循环,c++,loops,breakpoints,C++,Loops,Breakpoints,我使用VS2017 studio社区。 我想用一个已经被前向淘汰的矩阵来代替。所以我做了相应的模板函数 template<typename element_type> inline void backwardSubstitution(std::vector<std::vector<element_type>> & mat, std::vector<element_type>&sol) { sol.resize(mat.siz

我使用VS2017 studio社区。 我想用一个已经被前向淘汰的矩阵来代替。所以我做了相应的模板函数

template<typename element_type>
inline void backwardSubstitution(std::vector<std::vector<element_type>> & mat,
std::vector<element_type>&sol) {
    sol.resize(mat.size());
    unsigned int col_size = mat[0].size();

    double numerator ;
    double multiplier;
    for (unsigned int col_id = col_size - 1; col_id > -1; --col_id) {

        //INNER LOOP!!!!!!!!!!!!!!!!
        for (unsigned int row_id = mat.size(); (row_id < col_id + 1) && row_id > -1; --row_id) {

            if (row_id == col_id) {
                numerator = mat[row_id][col_id];
                mat[row_id][col_id] = 1.;   
                mat[row_id][col_size] /= numerator;
            }
            else
            {
                multiplier = -mat[row_id][col_id];
                mat[row_id][col_id] = 0.;
                mat[row_id][col_size] += multiplier;
            }

            sol[row_id] = mat[row_id][col_size];
        }
    }
    return;
}//Point to which VS2017 jumps
2) sol:与反置换()中初始化的相同

什么也没发生。因此,我将函数的行标记为断点并开始调试。当这一步经过第一个循环时,也就是说,当它遇到内部循环时,我的VS2017只会在返回命令之后到达点。
我曾经犯过一个类似的错误,然后我被告知条件总是不满足。但我目前面临的问题似乎不是这样的

col\u id>-1;
”--
col\u id
是一个无符号的整数。你能解释一下无符号整数怎么可能小于-1吗?通过将无符号值与-1进行比较,您希望实现什么?一旦你找到了这个问题的答案,并研究你的C++书关于把负值转换成未签名类型的话,你应该能够找出为什么你的程序不起作用。@ SAMVARSHIVCHIK,我只想在COLYID大于或等于0时进行for循环工作。<代码>无符号int ROWIDID= MAT.siz();
可能应该是
无符号int row\u id=mat.size()-1无符号值将始终大于或等于0。不管你用它做什么。根据我们共享宇宙的物理定律,根据定义,无符号值总是大于或等于0。你明白吗?你知道当一个负值和一个无符号值比较时会发生什么吗?这里有个提示。试试这个:
unsignedintv=-1;无法停止在你的问题标题上添加垃圾。如果你想发布答案,就这样做。
std::vector<std::vector<double>> small_mat3 = {
    { 144.0000, 12.0000, 1.0000, 9.0000 },
    { 0       ,  2.9167, 0.8264, 5.4375 },
    { 0       ,       0,-0.2000,-0.9714 },
};
std::vector<double> sol;
backwardSubstitution(small_mat3, sol);
std::cout << std::endl;
print(small_mat3);//print function I defined.
for (double element : sol) {
    std::cout << element << std::endl;
}
144 12 1 9
0 2.9167 0.8264 5.4375
0 0 -0.2 -0.9714
0
0
0