[英]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.