Как найти минимальное значение между тремя (для цикла)? - PullRequest
0 голосов
/ 30 октября 2019

Мне нужно найти минимум sonarRange [i], sonarRange2 [i] и sonarRange3 [i]. Каждый из трех предыдущих массивов находится в отдельном (для цикла), поскольку он показывает код

. Я использовал оператор 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();

    }

Ответы [ 3 ]

0 голосов
/ 31 октября 2019

Я хочу найти минимум среди трех массивов для каждого индекса

Как предложил Реми Лебо, поместите их в массив и используйте 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());
}
0 голосов
/ 31 октября 2019

Если у вас есть 3 простых массива по 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 выше.

0 голосов
/ 31 октября 2019

Вы должны использовать std :: min_element () , чтобы найти минимальный элемент каждого массива, а затем используйте std :: min () , чтобы найти минимум из трех значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...