创建一个可对动态对象数组进行混洗的模板

时间:2019-05-27 13:01:55

标签: c++

因此,我需要创建一个模板函数,以对动态对象的动态数组进行混洗。练习通过给我一个起点来指导我。

#include<iostream>

using namespace std;

template < class X > void shuffle(X ** myArray, int myArraySize) {
  // TODO: Implement here the shuffle algorithm 
}

我有点不知道如何在函数内使用指针,但对代码应如何有一个大致的了解。我知道它有很多错误,但这只是一个主意。

for (int i = myArraySize - 1; i > 0; i--) {
  int index = //a random index in the span [0,i]
  int a = myArray[index];

  myArray[index] = myArray[i];
  myArray[i] = a;
}

2 个答案:

答案 0 :(得分:0)

实际上,在c ++参考中已经有一个关于如何对数组进行混洗的示例。 http://www.cplusplus.com/reference/algorithm/random_shuffle/http://www.cplusplus.com/reference/algorithm/shuffle/ 描述了如何实现std :: random_shuffle和std :: shuffle

答案 1 :(得分:0)

你的意思是这样吗?

#include <iostream>
#include <stdlib.h>
using namespace std;

template< class T >
void shuffle(T* myArray, int myArraySize){
    int index;
    T temp;
    for (int i = myArraySize - 1; i > 0; i--) {
        index = rand() % myArraySize;

        temp = myArray[index];
        myArray[index] = myArray[i];
        myArray[i] = temp;
    }
}

int main(){
    int* ints = new int[10];

    for(int i=0; i<10; i++){
        ints[i] = i+1;
    }
    for(int i=0; i<10; i++){
        cout << ints[i] << "-";
    }
    cout << " Before Shuffle" << endl;


    shuffle<int>(ints, 10);


    for(int i=0; i<10; i++){
        cout << ints[i] << "-";
    }
    cout << " After Shuffle" << endl;
}