如何找到三个(for循环)之间的最小值?
Posted
技术标签:
【中文标题】如何找到三个(for循环)之间的最小值?【英文标题】:How to find the minimum value between three (for loop)? 【发布时间】:2019-10-30 20:57:34 【问题描述】:我需要找到 sonarRange[i]、sonarRange2[i] 和 sonarRange3[i] 的最小值。前面三个数组中的每一个都在一个单独的(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
将 3 个值放入一个数组中,然后使用std::min_element()
找到该数组中的最小值
是要在每个数组中求最小值还是要在每个索引的三个数组中求最小值?
顺便说一句,如果您的问题是关于代码的,您最好显示代码,您发布的部分仅与问题远程相关。另见:minimal reproducible example
顺便说一句,如果您发现自己将变量命名为 foo1
、foo2
和 foo3
,那么您可能更希望将 vector
称为 foo
。
【参考方案1】:
您应该使用std::min_element () 找到每个数组的最小元素,然后使用std::min () 找到三个值中的最小值。
【讨论】:
问题不太清楚,但在 cmets 中发现 OP 想要别的东西【参考方案2】:我想在每个索引的三个数组中找到最小值
按照 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】:如果你有 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
。
【讨论】:
以上是关于如何找到三个(for循环)之间的最小值?的主要内容,如果未能解决你的问题,请参考以下文章