繁体   English   中英

向量下标超出向量范围

[英]Vector subscript out of range from a vector of vectors

也许已经晚了,但是我不明白为什么我的矢量下标超出了范围:

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;

暂无
暂无

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

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