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];
还是有更短的路?
答案 0 :(得分:5)
取消引用迭代器。
cMinDist[i] = *result;
迭代器是指针的泛化。因此,它们是以它们为模型的。
答案 1 :(得分:1)
对于类std :: vector的迭代器(它们属于随机访问迭代器的类别),您可以使用记录
cMinDist[i] = *result;
或
cMinDist[i] = result[0];
与指针类比。:)
记录中指针的唯一区别在于你可以写指针
0[p];
但对于迭代器,您可能不会写相同的内容:)
0[it];