我有一个向量(Vp_cpp),我想转换为2D向量(声明为Vp_2D)。但是,我的实现有些不正确,因为它无法从内循环"到达线路#34;
std::vector<double> Vp_cpp;
std::vector<std::vector<double> > Vp_2D;
Vp_2D.resize(N_cpp);
for (int i = 0; i < N_cpp; ++i)
Vp_2D[i].resize(N_cpp);
for (int j = 0; j < N_cpp; j++)
for (int k = 0; k < N_cpp; k++)
{
cout << "Beginning inner loop" << endl;
Vp_2D[i_cpp][i_cpp2] = Vp_cpp[i_cpp2];
cout << "Out from inner loop" << endl;
}
可能出现什么问题?
答案 0 :(得分:2)
这条线对我来说似乎不对:
Vp_2D[i_cpp][i_cpp2] = Vp_cpp[i_cpp2];
我会写:
Vp_2D[j][k] = Vp_cpp[i++];
其中i
用于迭代Vp_cpp
。它应该在for (int j, ...
循环之前初始化为0。
答案 1 :(得分:2)
更改行
Vp_2D[i_cpp][i_cpp2] = Vp_cpp[i_cpp2];
到
Vp_2D[j][k] = Vp_cpp[(j * N_cpp) + k];
否则你只需要多次重新分配一个值。
答案 2 :(得分:1)
Vp_2D[i_cpp][i_cpp2] = Vp_cpp[i_cpp2];
每当您的循环通过此指令时,它将继续重置Vp_2D[i_cpp][i_cpp2]
处的值(因为循环内的i_cpp
和i_cpp2
上没有可见的分配。 )
您应该将其更改为Vp_2D[j][k]
。