因此,我需要从最接近该列平均值的列中更改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数组中删除元素的方法
任何帮助将不胜感激
答案 0 :(得分:0)
目标是在每一列中删除一个元素。
因此,元素的数量在每一列中保持不变,而不必在每一行中保持不变。
一种解决方案是使用向量的向量,并用它表示矩阵的转置。在矩阵M
中,对于每个M[i][j]
元素,纯粹的约定是i
代表一行,j
代表一列。取相反的值等同于颠倒该约定。
因此,您只需要删除每个代表列的向量M[i]
中的一个元素即可。
如果强制使用这种方法,很容易将这种方法用于经典C样式数组。
PS:提到的约定不是通用的。例如,对于信道编码,专家使用线向量。然后,所使用的矩阵就是它们与经典原始向量约定的转置。