【问题标题】:How to change Single Element(integer) from 2D Arrays columns如何从二维数组列更改单个元素(整数)
【发布时间】:2018-11-18 19:05:04
【问题描述】:

所以我需要从最接近该列平均数的列中更改元素(整数)。 例如:

我们有这个二维数组array[3][3]

1 4 7

2 5 8

3 6 9

所以从第一列开始,我需要更改/替换 2 ((1+2+3)/3=2) 因为它最接近列的平均值

对于第二列,我需要更改/替换 5 ((4+5+6)/3=5)

第三个 8

所以在最终版本中我会得到

1 4 7

3 6 9


我只是通过缩短数组的长度并在每个插槽中推送数字来“删除”元素,这就是我对一维数组的做法

 int search(char A[], int B[], int n, char tp, int dd) //Search for number
{
    int ind = -1;
    for (int i = 0; i < n; i++)
        if ((A[i] == tp) && (B[i] == dd))
            ind = i;
    return ind;
}
void remove(char A[], int B[], int & n, int ind) //remove number from array
{
    for (int i = ind; i < n - 1; i++)
    {
        A[i] = A[i + 1];
        B[i] = B[i + 1];
    }
    n--;

我知道如何删除简单的一维数组中的元素,但不能真正想出实现从二维数组中删除元素的方法

任何帮助将不胜感激

【问题讨论】:

  • 请展示您解决此任务的尝试 - 即使它不成功。 “从数组中删除元素”到底是什么意思?你知道std::vector吗?
  • “我们有这个二维数组” 那是一堆数字,不是二维数组。请注意,您不能从原始 c 样式数组中删除任何元素。为此,您需要在代码中使用std::vector&lt;std::vector&lt;int&gt;&gt; 表示二维数组。
  • 我明白了,你有文本,它代表(解释后)一个二维数组。您是否将数据存储在某个 int array[3][3] 或某个 std::vector&lt;std::vector&lt;int&gt;&gt; 容器中?
  • @Dj_Bear 我知道如何删除简单一维数组中的元素 -- 你怎么能做到不可能?您不能从数组中删除元素。您可以更改元素,但不能简单地删除元素。
  • @Dj_Bear -- 在您发布的代码中(请在此处发布,而不是在 pastebin 上发布),您是在 更改 元素,而不是从数组中删除元素。请注意更改删除之间的区别。数组的大小仍然是n 个项目。

标签: c++ arrays multidimensional-array


【解决方案1】:

目标是删除每一列中的一个元素。

因此,每列中的元素数量保持不变,而不必在每行中保持不变。

一种解决方案是使用向量的向量,并用它来表示矩阵的转置。在矩阵M 中,对于每个M[i][j] 元素,i 表示一行而j 表示一列是纯粹的约定。取反相当于颠倒这个约定。

因此,您只需要在代表一列的每个向量M[i] 中删除一个元素。

这种方法很容易适用于经典的 C 风格数组,如果不得不这样做的话。

PS:上述约定并不普遍。例如,对于信道编码,专家使用线向量。然后使用的矩阵是它们应该使用经典原始向量约定的转置。

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多