2013-11-04 46 views
-5

我有一個問題,我在互聯網上發現,但它不是最好的解決方案。我的問題是我有一個2D矩陣,我想刪除第i個位置的一列。例如矩陣可以表示爲A [2] [3] = {1,2,3,4,5,6}。我想刪除位置2的列。所以輸出是B = {1,3,4,6}。你能幫我嗎?從C++的2D數組中刪除列

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

在'inputMatrix [position]'處釋放內存並將i的'inputMatrix [i] = inputMatrix [i + 1]'從'位置'複製到小於2的大小。另外,你的函數實際上應該得到矩陣的大小。 – Shahbaz

+0

@Shahbaz它更像是將給定列之後的所有元素移到左邊一個位置,然後爲最後一個元素釋放內存。您不能釋放數組中間的內存。 –

+0

@IvayloStrandjev,哦,等等,對。我所做的實際上是刪除一行(假設'inputMatrix [i]'選擇行'i')。如果矩陣選擇第一行,然後選擇顏色,則無法實際複製數據。 – Shahbaz

回答

0

你不能做到這一點的就地靜態數組在C++中。您將需要創建另一個陣列並在那裏複製數據。但是,如果您使用指向動態數組的指針數組,則可以在原地移動元素,並調用realloc來縮小數組。您也可以使用矢量矢量並調用remove。

+1

我想我可以複製到其他矩陣比原始尺寸小矩陣。這是對的嗎? – user2408476

+0

是的,你可以通過寫一個循環雙。 –

+0

沒有明智的實現會每次複製整個矩陣,特別是對於縮小操作。 –