我写了以下内容来获取最大数字的索引值。
int TravellingSalesMan::getMaximum(double *arr){
double temp = arr[0];
int iterator = 0;
for(int i = 0; i < 30; i++){
if(arr[i] > temp){
iterator = i;
}
}
return iterator;
}
但是输出不断进入条件语句并不断打印出 29。我不知道为什么会发生这种情况
我也尝试使用 max_element() 但没有运气
编辑
上面的函数调用如下
static unsigned int chromosome = 30;
double value[chromosome]
for(int i = 0; i < chromosomes; i++){
value[i] = estimateFitness(currPopultaion[i]);
}
int best = 0;
best = getMaximum(value);
cout<<best<<endl; // this just prints out 29
好吧,本来不打算写答案的,只是看到代码逻辑错误太多,评论区写不下去了!
首先,你对变量名的使用
iterator
是非常错误的。它不用于对列表进行迭代。为什么要制造混乱。最好使用类似的max_index
东西。
为什么从
i=0
?你的临时值是arr[0]
,所以没有用。再次检查第一个元素。从 i=1 开始!
temp
在那个函数中毫无意义。最大索引最初应该是0
,并设置为i
如果有一些arr[i]
大于arr[max_index]
。
将长度单独传递给函数是更好的编码,因为它使代码更清晰。
中的内容
arr
没有被修改,因此比抱歉更安全:制作指针const
。
重新编写代码,应该是:
int TravellingSalesMan::getMaximum(const double *arr,int len)
{
int max_index = 0;
for(int i = 1; i < len; i++)
{
if(arr[i] > arr[max_index])
max_index = i;
}
return max_index;
}
值得注意的是,上面的代码中,len
,i
, 和函数结果应该都是无符号整数类型。没有理由允许有符号整数索引,因此如果调用者通过硬指定unsigned
或仅size_t
作为索引变量类型这样做,则使其成为来自调用者的警告条件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句