私は配列をシャッフルする方法を持っていますが、動作していないので、今修正する方法がわかりません。 shuffleArray
によって返された配列からmainに新しい配列を作成するにはどうすればよいのですか?シャッフルされた配列を新しい配列に割り当てることはできません。関数から返された配列から新しい配列を作成するにはどうすればよいですか?
using namespace std;
template <class T> T min (T array, T size){
int min=array[0];
for(int i=1;i<size;i++){
if(array[i]<min){min=array[i];}
}
return min;
}
template <class T> T indexOf (T array[], const int size, T value){
for(int i=0;i<size;i++){
if(array[i]==value){return value;}
}
return -1;
}
template <class T> T shuffleArray (T array[], T size){
T* Array2 = new T[size];
for(int i=0;i<size;i++){
Array2[i]=array[i];
}
random_shuffle(&Array2[0],&Array2[size]);
return *Array2;
}
int main(){
int a[]= {1,2,3,4,5};
int index = indexOf(a, 5, 3);
cout << endl << "The index is:" << shuffleArray(a, 5)<<endl;
cout << endl << "The index is:" << index<<endl;
return 0;
}
なぜ関数内に配列のコピーを作成していますか?関数に渡す配列をシャッフルするだけで、コールサイトの配列に反映されます。 – NathanOliver
'return * Array2;'は悪い考えです。メモリリークが残っている可能性があります。 –
'using namespace std;'は習慣に慣れていないので、今すぐ止めることができれば、将来的に頭痛の種をたくさん避けることができます。 'std ::'接頭辞は理由のためにそこにあります:それはあなた自身のクラス、構造体および変数との衝突を避けます。 – tadman