我声明了一个 vector ,用于存储给定帧中所有边界框的面积。然后,我从头到尾使用了一个迭代的 vector 来获取值。然后,我按升序对这些值进行排序(最低->最高)。
这是我使用的代码:
double area = contourArea(boundingBoxArea);
list_area.push_back(area);
sort(list_area.begin(), list_area.end());
vector<double>::const_iterator area_iter;
int i = 0;
for(area_iter = list_area.begin(); area_iter != list_area.end(); area_iter++)
{
i++;
cout<<"Iterator " <<i<< " size is : " <<*area_iter<<endl;
}
我的问题是,我只对一组数字中的最后两个值(两个最高值)感兴趣,但我无法真正了解如何实现目标。
这里有人对我的问题有建议或解决方案吗...?
问候
最佳答案
遍历列表,每次将新值与旧的最高值进行比较。如果新值较高,则将其存储为最高值,并使用第二个变量来保留先前的最高值。
这样的事情..在语法上可能不是正确的,但是在这里是:
int iCurrentHighest = 0;
int previousHighest = 0;
for(area_iter = list_area.begin(); area_iter != list_area.end(); area_iter++)
{
if(*area_iter>iCurrentHighest)
{
previousHighest = iCurrentHighest;
iCurrentHighest = *area_iter;
}
else
{
if ((*area_iter<iCurrentHighest) && (*area_iter>previousHighest))
{
previousHighest = *area_iter;
}
}
}
关于c++ - 从 vector 检索两个最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15036392/