程序似乎跳过内循环

时间:2018-04-21 13:07:41

标签: c++ loops breakpoints

我使用VS2017工作室社区。 我想要替换已经向前消除的矩阵。所以我做了相应的模板功能。

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

我用矩阵测试了它。

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;
}

结果如下:

1)small_mat3:和以前一样。

144 12 1 9
0 2.9167 0.8264 5.4375
0 0 -0.2 -0.9714

2)sol:与backSubstitution()中初始化相同。

0
0
0

什么都没发生。所以,我将函数行标记为断点并开始调试。当步骤经过第一个循环时,也就是说,当它遇到INNER LOOP时,我的VS2017只是在返回命令后立即指向。 我曾犯过类似的错误,然后我被告知条件总是没有实现。但我面临的当前问题似乎不是那样的事情。

0 个答案:

没有答案