迭代循环重复的次数比我预期的要多
Iterative loop repeats more times than I expect
我尽力了,但我无法弄清楚问题所在。在"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;
因此,每次尝试创建数组都会产生一个输出。而且由于您使用指向数组的指针,因此每次都会输出最终的有效数组。
相关文章:
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 使用基于范围的循环迭代矢量时出现问题
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 如何基于循环迭代器选择函数
- 如何使用基于范围的for循环迭代Rapidjson文档(它本身就是一个JSON数组)
- 在循环迭代期间将引用保存到矢量中的空指针
- 在每次循环迭代时停止代码执行毫秒
- 优先级队列(使用 pairs<int,int> ) 根据 for 循环迭代器的顶级元素
- 如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?
- 先前循环迭代对当前迭代执行时间的影响
- C++使用 for 循环迭代 2 个向量
- 为什么循环迭代不打印任何东西?
- 每次循环迭代后递减迭代器都会显示出奇怪的行为
- 虽然循环迭代了C++中的太多元素
- 循环迭代后,C 函数调用不会再次调用
- 指向向量和向量的指针中的循环迭代
- 为矩阵创建动态数组,以循环迭代器命名
- for 循环 - 迭代特定元素
- 通过线程分发循环迭代