因此,我需要创建一个模板函数,以对动态对象的动态数组进行混洗。练习通过给我一个起点来指导我。
#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;
}
答案 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;
}