我声明了一个 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/

10-17 02:13