繁体   English   中英

矢量超出范围,但为什么?

[英]vector is out of range,but why?

它说我的向量超出了 ArrayD 的范围。 但我不明白为什么。 其他一切都有效。 是说在双重deez之后向量超出范围。 因此,它不会完全上升。

使用命名空间标准;

无效你好();

无效的文件();

双 x, y, z;

双P,B;

诠释 E = 0;

双V[16];

双C[16];

双D[16];

整数 m, n;

主函数()

{

Infile();
return 0;

}

无效的文件()

{

ifstream fileA("P_matrix.txt");
ifstream fileB("b_matrix.txt");
ifstream fileC("d_matrix.txt");
vector<double>ArrayP;
vector<double>ArrayB;
vector<double>ArrayD;


cout << "P Matrix Values \n";
while (fileA.good())
{
    fileA >> P;
    ArrayP.push_back(P);
}
for (int i = 0; i<ArrayP.size(); i++)
{
    cout << ArrayP[i] << ",";
}
system("pause");



cout << "B Matrix Values \n";
while (fileB.good())
{
    fileB >> B;
    ArrayB.push_back(B);
}
for (int j = 0; j < 16; j++)
{
    cout << ArrayB[j] << ",";
}
system("pause");
while (fileC.good())
{

    fileC >> D;
    ArrayD.push_back(D);


}
for (int k = 0; k <16; k++)
{
    cout << ArrayD[k] << ",";

}

system("pause");


for (int m = 0; m < 16; m++)
{
    V[m] = ArrayP[m] * ArrayB[m];
    cout << V[m] << ",";
}
system("pause");

for (int n = 0; n < 16; n++)
{
    C[n] = V[n] * ArrayD[n];
    cout << C[n] << ",";
}

//outfile.close();
system("pause");

double deez;
for (int d = 0; d < 16; d++) //acscending
{
    for (int q = 0; q < 16; q++)
    {
        if (ArrayD[q] < ArrayD[q - 1])
        {
            deez = ArrayD[q];
            ArrayD[q] = ArrayD[q - 1];
            ArrayD[q - 1] = deez;
        }
    }
}
for (int q = 0; q < 16; q++)
    cout << C[q] << ",";
system("pause");



double nutz;
for (int d = 0; d < 16; d++) //descending
{
    for (int q = 0; q < 16; q++)
    {
        if (V[q] < V[q + 1])
        {
            nutz = V[q];
            V[q] = V[q + 1];
            V[q + 1] = nutz;
        }
    }
}
for (int q = 0; q < 16; q++)
    cout << V[q] << ",";
system("pause");
return;

}


在这里,q 从零开始,因此您正在尝试访问索引 [-1]。

ArrayD[q - 1]

在遍历 ArrayP 时,您正确地执行以下操作:

    for (int i = 0; i<ArrayP.size(); i++)

但是对于 ArrayB 和 ArrayC,您似乎假设在这些 arrays 中只有 16 个元素(您确定吗?)。 我看不到任何证据表明 arrays 被限制在代码中始终包含 16 个元素,因此这也可能是问题所在。

再后来,您似乎认为所有这些 arrays 都有 16 个元素?

    for (int m = 0; m < 16; m++)
    {
        V[m] = ArrayP[m] * ArrayB[m];
        cout << V[m] << ",";
    }

这些是可能导致超出范围错误的明显位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM