Making use of max_element?

Making use of max_element?

本文关键字:element max use of Making      更新时间:2023-10-16

我有以下

static const unsigned int chromosome = 6;
double bestFitness[chromosomes];
for(int i = 0; i < chromosomes; i++){
    bestFitness[i] = estimateFitness(currPopultaion[i]);
}
int best1 = 0;
best1 = max_element(bestFitness, bestFitness + chromosomes) - bestFitness;
.......

IDE似乎正在扔一个警告"隐式转换失去整数精度:'long'to'int'

同样在检查BEST1的值时,它似乎总是在编译时分配给0。

我目前无法理解MAX_ELEMENT()函数是否按预期调用。

两个指针的差异具有 std::ptrdiff_t型,该型号已签名,并且可能比int更宽。您应该将best1的类型更改为std::ptrdiff_t

您也可以使用std::distance来计算<iterator>

的距离
std::ptrdiff_t best1 = std::distance(
                           bestFitness,
                           std::max_element(bestFitness, bestFitness + N));

当然,您可以根据迭代器重写代码并完全放弃索引。

还要注意,如果输入范围为空,则返回的迭代器可能会过去。在您的情况下,这不会发生(因为数组始终具有非零尺寸),但是在更一般的设置中,您需要考虑。

还要注意,您不需要记住数组大小;它是类型的一部分,可以通过begin/end获得,也可以从<iterator>

获得
std::max_element(std::begin(bestFitness), std::end(bestFitness));