如何从2D数组列更改单个元素(整数)

时间:2018-11-18 19:05:04

标签: c++ arrays multidimensional-array

因此,我需要从最接近该列平均值的列中更改Element(一个整数)。 例如:

我们有这个2D数组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


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

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

我知道如何删除简单的1d数组中的元素,但是无法真正实现从2d数组中删除元素的方法

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

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

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

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

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

如果强制使用这种方法,很容易将这种方法用于经典C样式数组。

PS:提到的约定不是通用的。例如,对于信道编码,专家使用线向量。然后,所使用的矩阵就是它们与经典原始向量约定的转置。