2012-04-18 18 views
0

我聲明瞭一個動態數組int *idArray;,我想將該值複製到tempArray,然後我將更改tempArray的順序,但我不想更改順序idArray,我怎麼寫它?我試圖實現它,但是當tempArray順序被改變的idArray順序也發生改變。如何在C++中複製動態數組的值

int *idArray = new int[size]; 
int *tempArray = idArray; 
int m, n; 
for(int k = 0; k < size; k++) { 
    m = rand() % size; 
    n = tempArray[m]; 
    tempArray[m] = tempArray[k]; 
    tempArray[k] = n; 
} 
+4

,如果你談論的是C++,爲什麼不標準::陣列或至少的std ::載體?你真的需要原始指針嗎?它不是一個臨時數組,它是一個指針。 – CyberGuy 2012-04-18 11:59:28

回答

6
std::vector<int> idArray(size); 
std::vector<int> tempArray = idArray; 

Problemo SOLVO。

此外,您還可以使用std::random_shuffle - 你不必自己洗牌的載體。

+2

你忘了'random_shuffle' :) – msandiford 2012-04-18 12:01:25

+0

@msandiford:不,他的代碼的其餘部分可以保持原樣或改變,或什麼的。 *問題*是指針別名,我已經解決了。 – Puppy 2012-04-18 12:02:15

+1

這是一個向量的完美用例,忘記原始動態數組。 – 111111 2012-04-18 12:03:37

1

我建議使用std::vector<>數組。 std::vector<>將爲您處理複製和其他內存管理。另外它還記得陣列的大小。 (new[]沒有。)

否則,你需要做以下幾點:

int *idArray = new int[size]; 
int idArray_size = size; // note this. you need to save array's size somewhere. 
....... 
int *tempArray = new int[idArray_size]; 

/* copy */ 
for(int i = 0; i < idArray_size; i++) 
    tempArray[i] = idArray[i]; 

int m, n; 
for(int k = 0; k < size; k++) { 
    m = rand() % size; 
    n = tempArray[m]; 
    tempArray[m] = tempArray[k]; 
    tempArray[k] = n; 
} 
+0

嗯...可疑。如果我是你,我只會使用'std :: vector'顯示代碼。事實上,這是邊界線downvotable。不過,現在我決定不去。 – Puppy 2012-04-18 12:04:43

+2

你可以複製語義上更清晰地(也可能是更有效的)通過使用'標準::複製(idArray,idArray +大小,tempArray);' – 2012-04-18 12:05:59

+0

@DeadMG,它依賴。我回答了他的問題(不想使用'std :: array'可以是完全有效的場景),並且提出了更好的解決方案。當其他人可能的時候,我不想強​​迫他使用'C++'的方式。 – nothrow 2012-04-18 12:09:19

-3

這是你所分配的實際內存和idArray指向它:

int *idArray = new int[size]; 

而這僅僅是指向同一內存地址的指針:

​​

您應該聲明tempArray相同小號idArray,然後就內容複製到:

int *idArray = new int[size]; 
int *tempArray = new int[size]; 
memcpy(tempArray,idArray,size * sizeof(int)); 
+2

-1用於暗示'memcpy'。改爲使用'std :: copy'。 – 2012-04-18 12:03:46

+0

感謝您的幫助! – LoveTW 2012-04-18 12:25:33

+0

@Luchian Grigore謝謝你的幫助!因爲我不能回覆你的帖子,所以我在這裏回覆:) – LoveTW 2012-04-18 12:36:13

0

因爲您的臨時數組指出在你的ID陣列

INT * tempArray = idArray;

所以在此代替你Idarray聲明YOUT *tempArray和manualy複製價值的臨時數組

+1

其實,只是_declaring_你自己的陣列還不足以使用它。你將不得不_ _ [定義](http://stackoverflow.com/a/1410632/140719)_它。 – sbi 2012-04-18 12:18:38

+0

感謝您的幫助! – LoveTW 2012-04-18 12:25:01

+0

@ Mr.mr。反饋請:) – Chlebta 2012-04-18 12:44:39