迭代循环比我预期的重复次数多

时间:2014-11-28 13:03:22

标签: c++ arrays

我尽我所能,但我无法弄清楚问题。在" 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;

}

1 个答案:

答案 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;

因此,每次尝试创建数组都会产生输出。因为你使用指向数组的指针,它每次都会输出你的最终有效数组。