【问题标题】:Converting 1D vector into 2D in C++在 C++ 中将一维向量转换为二维
【发布时间】:2012-08-23 14:08:49
【问题描述】:

我有一个 1D 向量(Vp_cpp),我想转换为 2D 向量(声明为 Vp_2D)。但是,我的实现有点不正确,因为它无法到达“从内部循环出来”这一行。

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;
}

可能出了什么问题?

【问题讨论】:

  • 错误信息?例外?当你运行这个时会发生什么?您是否有更多关于“无法到达线路“..””的详细信息
  • i_cppi_cpp2 是什么?除了内部循环之外,没有任何地方显示 - 没有声明/定义或赋值。
  • 我认为i_cppi_cpp2 应该是jk
  • 什么是N_cppi_cppi_cpp2
  • cmets 字里行间说的是:发SSCCE

标签: c++ vector stl


【解决方案1】:

这行对我来说似乎是错误的:

Vp_2D[i_cpp][i_cpp2] = Vp_cpp[i_cpp2]; 

我会写:

Vp_2D[j][k] = Vp_cpp[i++];

其中i 用于迭代Vp_cpp。应该在for (int j, ...循环之前初始化为0。

【讨论】:

    【解决方案2】:

    换行

    Vp_2D[i_cpp][i_cpp2] = Vp_cpp[i_cpp2];
    

    Vp_2D[j][k] = Vp_cpp[(j * N_cpp) + k];
    

    否则,您只会多次重新分配一个值。

    【讨论】:

      【解决方案3】:

      Vp_2D[i_cpp][i_cpp2] = Vp_cpp[i_cpp2]; 每次循环通过此指令时,它都会不断重置 Vp_2D[i_cpp][i_cpp2] 的值(因为循环内的 i_cppi_cpp2 上没有可见的赋值。)

      你应该把它改成Vp_2D[j][k]

      【讨论】:

      • “我认为”在我看来永远不是一个可以接受的答案。 “我认为”应该添加为 cmets(或重写)。
      • @Default:- 你将如何回答这个问题? “这个代码有什么问题char* x=malloc(10)”。在评论中?? 在 malloc 之前添加 (char*) !!! ?????
      • 不确定您在问什么或为什么要使用多个问号。我的评论不清楚吗?我在以下行上发表评论:我认为它应该是……,据我说应该是“它应该是……”。如果您不知道答案(“我认为”暗示了这一点),我认为不应该将其作为答案。你明白我在说什么吗?你的问题的答案是正确的。请注意,您没有写“我认为您应该在 malloc 之前添加 (char*)”
      • :) 具有讽刺意味的是......这样愚蠢的问题不需要 cmets。你可以看到答案是多么简单,按照 SO,它会征求意见。
      • 我冒昧地重写了你的答案。我希望这能更清楚地说明我的观点。现在,答案不再是“我认为”了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      相关资源
      最近更新 更多