当我push_back到vector<vector<vector<int>>> wynik
值时,我在第1796行继续得到一个错误向量下标超出范围。我使用调试器来查看我得到它的哪一行,并用&lt; ---标记给你------。我是初学者所以请帮助我,因为我不知道出了什么问题。提前感谢您的回答。
以下是代码:
vector<vector<vector<int>>> most(vector<vector<int>> poczatek, int ilosczestawow)
{
vector<vector<vector<int>>> wynik;
vector<int> czas;
for (int z = 0;z < ilosczestawow;z++)
{
int A = dwanajmniejsze(poczatek[z])[0];
int B = dwanajmniejsze(poczatek[z])[1];
for(int i=1; poczatek[z].size()>3 ;i=i+4)
{
int C = dwanajwieksze(poczatek[z])[1];
int D = dwanajwieksze(poczatek[z])[0];
if (A + C < 2 * B)
{
int czas1 = 2 * A + C + D;
czas.push_back(czas1);
int iC = znajdzindeks(poczatek[z], C);
poczatek[z].erase(poczatek[z].begin() + iC);
int iD = znajdzindeks(poczatek[z], D);
poczatek[z].erase(poczatek[z].begin() + iD);
wynik[z][i].push_back(A);
wynik[z][i].push_back(C);
wynik[z][i+1].push_back(A);
wynik[z][i+2].push_back(A);
wynik[z][i+2].push_back(D);
wynik[z][i+3].push_back(A);
}
else
{
int czas2 = A + 2 * B + D;
czas.push_back(czas2);
int iC = znajdzindeks(poczatek[z], C);
poczatek[z].erase(poczatek[z].begin() + iC);
int iD = znajdzindeks(poczatek[z], D);
poczatek[z].erase(poczatek[z].begin() + iD);
wynik[z][i].push_back(A); <---------------- At this line i get an error.
wynik[z][i].push_back(B);
wynik[z][i + 1].push_back(A);
wynik[z][i + 2].push_back(C);
wynik[z][i + 2].push_back(D);
wynik[z][i + 3].push_back(B);
}
}
if (poczatek[z].size() == 3)
{
int C = dwanajwieksze(poczatek[z])[0];
int czas3 = B + A + C;
czas.push_back(czas3);
poczatek[z].erase(poczatek[z].begin(), poczatek[z].end());
wynik[z][wynik[z].size() + 1].push_back(A);
wynik[z][wynik[z].size()].push_back(B);
wynik[z][wynik[z].size() + 1].push_back(A);
wynik[z][wynik[z].size() + 1].push_back(A);
wynik[z][wynik[z].size()].push_back(C);
}
if (poczatek[z].size() == 2)
{
int czas4 = B + A;
czas.push_back(czas4);
poczatek[z].erase(poczatek[z].begin(), poczatek[z].end());
wynik[z][wynik[z].size() + 1].push_back(A);
wynik[z][wynik[z].size()].push_back(B);
}
wynik[z][0].push_back(suma(czas));
}
return wynik;
}
答案 0 :(得分:1)
行
wynik[z][i].push_back(A);
wynik[z][i].push_back(C);
wynik[z][i+1].push_back(A);
wynik[z][i+2].push_back(A);
wynik[z][i+2].push_back(D);
wynik[z][i+3].push_back(A);
if
块中的和else
块中的类似行是一个问题,因为它们使用无效的索引访问wynik
。您需要将以上行替换为:
// Create 1D vectors
std::vector<int> v1;
v1.push_back(A);
v1.push_back(C);
std::vector<int> v2;
v2.push_back(A);
std::vector<int> v3;
v3.push_back(A);
v3.push_back(D);
std::vector<int> v4;
v4.push_back(A);
// Create 2D vector by pusing 1D vectors to it.
std::vector<std::vector<int>> v5;
v5.push_back(v1);
v5.push_back(v2);
v5.push_back(v3);
v5.push_back(v4);
// Push the 2D vector to wynik
wynik.push_back(v5);
必须对else
块进行类似的更改。