如何在C ++中复制动态数组的值

时间:2012-04-18 11:56:59

标签: c++ arrays

我宣布一个动态数组int *idArray;,我想将值复制到tempArray,然后我将更改tempArray的顺序,但我不想更改订单idArray,我怎么写呢?我试图实现它,但是当tempArray的顺序发生变化时,idArray的顺序也会发生变化。

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 个答案:

答案 0 :(得分:6)

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

Problemo solvo。

此外,你可以使用std::random_shuffle - 你不必自己洗牌。

答案 1 :(得分: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; 
}

答案 2 :(得分:0)

因为你的临时数组是指向你的Id数组

  

int * tempArray = idArray;

所以取而代之的是你声明Yout *tempArray并将Idarray中的值复制到temp数组

答案 3 :(得分:-3)

这是你要分配的实际内存,idArray指向它:

int *idArray = new int[size]; 

这只是指向同一个内存地址的指针:

int *tempArray = idArray;

你应该将tempArray声明为与idArray相同,然后将内容复制到它:

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