我宣布一个动态数组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;
}
答案 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));