为什么代码告诉我Vectorsubscribtion超出范围

时间:2019-07-04 07:17:25

标签: c++

我为Neuronal网络编写了一个程序,除了以下几行代码外,一切工作正常:

for (unsigned i = 0; i < Net.size() - 1; i++)
    {
        //Net is a vector of Layers, Layers are a vector of neurons, and Neurons are a Vector of weights and a double "values", the weights are also doubles
        for (unsigned l = 0; l < Net[i].size(); i++)
        {


            for (unsigned k = 0; k < Net[i][l].weights.size(); k++)
            {
                Net[i + 1][k].value = sigmoid(Net[i + 1][k].value);

                Net[i+1][k].value += Net[i][l].value* Net[i][l].weights[k];


            }

        }

    }

执行错误矢量订阅超出范围,我正在尽力而为,但是我找不到错误

2 个答案:

答案 0 :(得分:1)

您在第二个for循环中犯了一个错误,在第二个for循环声明中'i'正在递增,并且'i'的值超出了向量的大小。

只需替换:

for (unsigned l = 0; l < Net[i].size(); i++)

与:

for (unsigned l = 0; l < Net[i].size(); l++)

我相信您还有第二个错误:

Net[i + 1][k]

应在三个位置(**之间)替换为:

Net[i + 1][l]



**Net[i + 1][k]**.value = sigmoid(**Net[i + 1][k]**.value);

**Net[i+1][k]**.value += Net[i][l].value* Net[i][l].weights[k];

答案 1 :(得分:1)

您遇到此错误

for (unsigned l = 0; l < Net[i].size(); i++)

应该是

for (unsigned l = 0; l < Net[i].size(); l++)

使用名为l的变量确实不是一个好主意,很容易将i1弄错。