C++ - 无法访问反向索引
C++ - Can not access reverse indexing
如果标题有误,或者没有正确说明问题,还请见谅。
我正在尝试计算矩阵的 LU 分解。给出矩阵 M:
M = [1 2 3],
[1 2 3],
[3 3 0]
现在我正在关注此处编写的一些代码:Link
它使用j
i
来计算较低的分解。当我尝试这种方法时,我不断收到 "Runtime error time: 0 memory: 3276 signal:11"
我不明白的是,当我在 3x3
循环中输出 i
、j
时,我得到:
i, j =
0 0 1 0 2 0
0 1 1 1 2 1
0 2 1 2 2 2
然后当输出 j,i
的索引时,我得到:
j, i =
0 0 0 1 0 2
1 0 1 1 1 2
2 0 2 1 2 2
就顺序而言这似乎是正确的 [0][0][0][2].........[2][2]
那么为什么我不能在我的向量中访问它?
目前我写的代码是:
void lu_decomposition(const std::vector<std::vector<double> > &vals)
{
std::vector<std::vector<double> > lower(3);
for(unsigned i=0; (i < 3); i++)
{
lower[i].resize(3);
for(unsigned j=0; (j < 3); j++)
{
if (j < i)
{
lower[j][i] = 0; // This is ok
}else{
lower[j][i] = vals[j][i]; // This is the runtime error
}
}
std::cout << std::endl;
}
}
代码在 ideone
上也可见
让我们专注于这些行:
lower[i].resize(3);
//...
lower[j][i] = vals[j][i];
现在问题清楚了吗?您正在调整 lower[i]
的大小,但随后您正在访问 lower[j]
,甚至 j > i
的大小尚未调整。如果您需要以这种方式访问矩阵,则必须事先对其进行预分配。这意味着放弃 resize
调用,而是像这样初始化变量:
std::vector<std::vector<double> > lower(3, std::vector<double>(3));
如果标题有误,或者没有正确说明问题,还请见谅。
我正在尝试计算矩阵的 LU 分解。给出矩阵 M:
M = [1 2 3],
[1 2 3],
[3 3 0]
现在我正在关注此处编写的一些代码:Link
它使用j
i
来计算较低的分解。当我尝试这种方法时,我不断收到 "Runtime error time: 0 memory: 3276 signal:11"
我不明白的是,当我在 3x3
循环中输出 i
、j
时,我得到:
i, j =
0 0 1 0 2 0
0 1 1 1 2 1
0 2 1 2 2 2
然后当输出 j,i
的索引时,我得到:
j, i =
0 0 0 1 0 2
1 0 1 1 1 2
2 0 2 1 2 2
就顺序而言这似乎是正确的 [0][0][0][2].........[2][2]
那么为什么我不能在我的向量中访问它?
目前我写的代码是:
void lu_decomposition(const std::vector<std::vector<double> > &vals)
{
std::vector<std::vector<double> > lower(3);
for(unsigned i=0; (i < 3); i++)
{
lower[i].resize(3);
for(unsigned j=0; (j < 3); j++)
{
if (j < i)
{
lower[j][i] = 0; // This is ok
}else{
lower[j][i] = vals[j][i]; // This is the runtime error
}
}
std::cout << std::endl;
}
}
代码在 ideone
上也可见让我们专注于这些行:
lower[i].resize(3);
//...
lower[j][i] = vals[j][i];
现在问题清楚了吗?您正在调整 lower[i]
的大小,但随后您正在访问 lower[j]
,甚至 j > i
的大小尚未调整。如果您需要以这种方式访问矩阵,则必须事先对其进行预分配。这意味着放弃 resize
调用,而是像这样初始化变量:
std::vector<std::vector<double> > lower(3, std::vector<double>(3));