std :: min_element获取迭代器的结果

时间:2015-03-28 09:12:16

标签: c++

std::vector<double> cMinDist;
    for (int i = 0; i < mc_4.size(); i++)
    {
        std::vector<double> temp;
        for (int j = 0; j <  mc_4.size(); j++)
        {
            if (j == i)
            {
                continue;
            }    
            temp.push_back( sqrt(pow(mc_4[i].x - mc_4[j].x,2) + pow(mc_4[i].y - mc_4[j].y,2)));         
        }

        std::vector<double>::iterator result =std::min_element(std::begin(temp),std::end(temp));
        cMinDist[i] =result; //error is here

    }

很好地得到这个错误

11  IntelliSense: no suitable conversion function from "std::_Vector_iterator<std::_Vector_val<std::_Simple_types<double>>>" to "double" exists 

如何从迭代器中提取结果,而不仅仅是结果的索引号?

我真的需要做一些事情:

int index = std::distance(std::begin(temp), result);
cMinDist[i] =temp[index];

还是有更短的路?

2 个答案:

答案 0 :(得分:5)

取消引用迭代器。

cMinDist[i] = *result;

迭代器是指针的泛化。因此,它们是以它们为模型的。

答案 1 :(得分:1)

对于类std :: vector的迭代器(它们属于随机访问迭代器的类别),您可以使用记录

cMinDist[i] = *result;

cMinDist[i] = result[0];

与指针类比。:)

记录中指针的唯一区别在于你可以写指针

0[p];

但对于迭代器,您可能不会写相同的内容:)

0[it];