【问题标题】:Delete column from 2D array in C++从 C++ 中的二维数组中删除列
【发布时间】:2013-11-04 14:51:55
【问题描述】:

我在互联网上发现了一个问题,但它没有最好的解决方案。我的问题是我有一个二维矩阵,我想在第 i 个位置删除一列。例如,矩阵可以表示为 A[2][3]={1,2,3,4,5,6}。我想删除位置 2 的列。所以输出是 B={1,3,4,6}。你能帮帮我吗?

A=[1 2 3
   4 5 6]

输出

   B=[1 3
      4 6]

功能是

int** delete_column(int** inputMatrix,int position)
{
  //The size of outMatrix must be smaller than inputMatrix

  return outMatrix;
}

【问题讨论】:

  • 释放inputMatrix[position] 处的内存并将inputMatrix[i] = inputMatrix[i + 1] for i 从position 复制到小于2 的大小。此外,您的函数实际上应该得到矩阵的大小。
  • @Shahbaz 更像是将给定列之后的所有元素向左移动一个位置,然后为最后一个元素释放内存。不能释放数组中间的内存。
  • @IvayloStrandjev,哦等等,对。我所做的实际上是删除一行(假设inputMatrix[i] 选择行i)。如果矩阵先在行上选择,然后在列上选择,则除了实际复制数据之外别无他法。
  • “你能帮帮我吗”不是关于编程语言的问题。
  • 你可以从这里得到它——“用于科学计算的 C++”(people.maths.ox.ac.uk/richardsonm/cpp.pdf)

标签: c++ c


【解决方案1】:

您不能在 c++ 中使用静态数组就地执行此操作。您将需要创建另一个数组并在那里复制数据。但是,如果您使用指向动态数组的指针数组,则可以就地移动元素,然后调用 realloc 来缩小数组。您还可以使用向量的向量并对它们调用 remove。

【讨论】:

  • 我想我可以复制到其他尺寸小于原始矩阵的矩阵。对吗?
  • 是的,你可以写一个双循环。
  • 没有明智的实现会每次都复制整个矩阵,尤其是对于收缩操作。
  • @LightnessRacesinOrbit 如果使用静态数组,您是否看到了替代方案?
  • @IvayloStrandjev:当然 - 最后留下空白空间。无论如何,它几乎肯定会在短期内被 insert 操作回收。
猜你喜欢
  • 2011-04-11
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
相关资源
最近更新 更多