繁体   English   中英

如何找到三个(for循环)之间的最小值?

[英]How to find the minimum value between three (for loop)?

我需要找到 sonarRange[i]、sonarRange2[i] 和 sonarRange3[i] 的最小值。 前三个 arrays 中的每一个都在一个单独的(for循环)中,因为它显示了代码

我使用 If 语句来计算最小值。 它有效,但我写了很多代码。

    for (int i = 0; i < 8; i++) {
        sonarSensor[i] = robot.getSonarReading(i);
        sonarRange[i] = sonarSensor[i]->getRange();

    }
    for (int i = 0; i < 8; i++) {
        sonarSensor[i] = robot.getSonarReading(i);
        sonarRange2[i] = sonarSensor[i]->getRange();

    }

    for (int i = 0; i < 8; i++) {
        sonarSensor[i] = robot.getSonarReading(i);
        sonarRange3[i] = sonarSensor[i]->getRange();

    }

您应该使用std::min_element ()找到每个数组的最小元素,然后使用std::min ()找到三个值中的最小值。

我想在每个索引的三个 arrays 中找到最小值

正如 Remy Lebeau 所建议的,将它们放在一个数组中并使用std::min_element

for (size_t i=0;i < 8; ++i){
    std::array<int,3> x{ sonarRange[i], sonarRange2[i], sonarRange3[i] };
    int min = *std::min_element(x.begin(),x.end());
}

如果你有 3 个普通的 arrays,每个有 8 个元素,这就足够了:

#include <algorithm>
#include <iostream>

using range_type = double; // change to the type you are using

int main() {
    range_type sonarRange[8];
    range_type sonarRange2[8];
    range_type sonarRange3[8];

    // fill sonarRanges

    // find and store the minimum at each index
    range_type result[8];

    for(size_t i = 0; i < 8; ++i) {
        result[i] = std::min({sonarRange[i], sonarRange2[i], sonarRange3[i]});
    }
}

如果您的编译器不接受该版本的std::min ,您可以自己添加:

<initializer_list>
template<class T>
T my_min(std::initializer_list<T> ilist)
{
    return *std::min_element(ilist.begin(), ilist.end());
}

然后使用my_min({sonarRange[i], sonarRange2[i], sonarRange3[i]})代替上面的std::min

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM