2012-04-18 98 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