我尽我所能,但我无法弄清楚问题。在" createArray"的最后一部分,我输出创建的最终数组。我的意思是重复一次但是它重复的次数比我预期的要多。 createArray是一个迭代函数。如果它重复3次,那么最后创建的符合标准的阵列将打印3 + 1次。
我正在尝试创建一个包含3个数字5次的数组,从而生成一个2D数组。数组中的3个数字从0到5中选取。我输入createArray(5,3,5)。然后将这5个阵列相互比较以查看是否存在重复。如果有,则整个过程再次开始,将再次挑选5个具有3个数字的阵列并相互比较。如果最后没有重复,则会打印出5个阵列。
#include <algorithm>
#include <iterator>
void deleteArray(int** array){
delete[] array;
}
int** createArray(int simu_times, int randomrun,int numberofrun){
vector<Int_t>fChosenRun;
int** Array = new int*[simu_times];
for(int i = 0; i < simu_times; ++i) {
fChosenRun=getRandom(1,randomrun,numberofrun);
Array[i] = new int[randomrun];
for(int j = 0; j < randomrun; ++j){
Array[i][j] = fChosenRun[j];
}
}
在下面的双嵌套循环中,我将数组相互比较。如果有任何重复,则会删除此数组并调用createArray以再次创建数组。
for(int j=0;j<simu_times;++j){
for(int i=0+j;i<simu_times;++i){
if(j!=i) {
if (std::equal(Array[j], Array[j]+ sizeof Array[j] / sizeof *Array[j], Array[i])){
cout<<"same: "<< j<<" "<<i<<endl;
deleteArray(Array);
createArray(simu_times,randomrun,numberofrun);
}
}
}
}
当阵列没有重复时,它们将被打印出来。所有阵列都应打印一次,但它们会多次打印出来。
for(int i=0;i<simu_times;++i){
for(int j=0;j<randomrun;++j){
cout<< i<<" "<<j<<" "<<Array[i][j]<<endl;;
}
cout<<endl;
}
return Array;
}
答案 0 :(得分:0)
似乎你在createArray()中输出循环,这会导致额外的输出。这是因为:
if (std::equal(Array[j], Array[j]+ sizeof Array[j] / sizeof *Array[j], Array[i])){
cout<<"same: "<< j<<" "<<i<<endl;
deleteArray(Array);
createArray(simu_times,randomrun,numberofrun);
// after having finally created an Array without duplicates, our successful method
// returns to this point of its parent method. Now the parent method _also_
// will run the following lines of code ...
}
}
}
}
// ... and produce extra output at this point.
for(int i=0;i<simu_times;++i){
for(int j=0;j<randomrun;++j){
cout<< i<<" "<<j<<" "<<Array[i][j]<<endl;;
}
cout<<endl;
}
return Array;
因此,每次尝试创建数组都会产生输出。因为你使用指向数组的指针,它每次都会输出你的最终有效数组。