向量下标超出向量向量的范围

Vector subscript out of range from a vector of vectors

本文关键字:向量 范围 下标      更新时间:2023-10-16

也许已经很晚了,但是我没有看到为什么我会在此代码的范围内获得vector subscript:

int m = 3;
int n = 2;
std::vector<std::vector<int>> path(m, std::vector<int>(n, 0));
for (int i = 0; i < path.size(); ++i)
    path[0][i] = 1;
for (int i = 0; i < path[0].size(); ++i)
    path[i][0] = 1;

谁能告诉我这里有什么问题?

您无法正确使用这些索引。

for (int i = 0; i < path.size(); ++i)
    path[0][i] = 1;

需要

for (int i = 0; i < path.size(); ++i)
    path[i][0] = 1; // Swap i and 0

for (int i = 0; i < path[0].size(); ++i)
    path[i][0] = 1;

需要

for (int i = 0; i < path[0].size(); ++i)
    path[0][i] = 1; // Swap i and 0

如果您完善了这样的代码,则问题很清楚。

int m = 3;
int n = 2;
std::vector<std::vector<int>> path(m, std::vector<int>(n, 0));
for (auto& subVec : path) {
    subVec[0] = 1;
}
std::vector<int>& firstVec = path[0];
for (auto& item : firstVec) {
    item = 1;
}

尝试此更改,我扭转了您的循环条件。

int m = 3;
int n = 2;
std::vector<std::vector<int>> path(m, std::vector<int>(n, 0));
for (int i = 0; i < path[0].size(); ++i)
    path[0][i] = 1;
for (int i = 0; i < path.size(); ++i)
    path[i][0] = 1;