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

Iterative loop repeats more times than I expect

本文关键字:循环 迭代      更新时间:2023-10-16

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

似乎你在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;

因此,每次尝试创建数组都会产生一个输出。而且由于您使用指向数组的指针,因此每次都会输出最终的有效数组。