1

我声明了一个动态数组int *idArray;,我想将值复制到 a 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

4 回答 4

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

问题解决。

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

于 2012-04-18T11:59:11.263 回答
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; 
}
于 2012-04-18T11:59:46.400 回答
0

因为您的临时数组指向您的 Id 数组

int *tempArray = idArray;

因此,您可以声明 Yout*tempArray并手动将值从 Idarray 复制到 temp Array

于 2012-04-18T12:05:28.753 回答
-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));
于 2012-04-18T12:00:06.267 回答