1

動的配列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

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からtempArrayに値を手動でコピーします

于 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 に答える