C++ 如何从stl向量中最小元素的迭代器位置获取int/size\t值?

C++ 如何从stl向量中最小元素的迭代器位置获取int/size\t值?,c++,stl,C++,Stl,迭代器给出了距离向量中的最小距离。 如何在我的报告列表中找到相应的位置? 如何从min\u元素返回的it迭代器中获取int/size\t值?您可以从如下迭代器中获取索引: std::vector<bool> reprVectors::encode(std::vector<float> input){ std::vector<float> distance; for(size_t i=0;i<this->reprVectors

迭代器给出了距离向量中的最小距离。 如何在我的报告列表中找到相应的位置?
如何从min\u元素返回的it迭代器中获取int/size\t值?

您可以从如下迭代器中获取索引:

    std::vector<bool> reprVectors::encode(std::vector<float> input){
    std::vector<float> distance;
    for(size_t i=0;i<this->reprVectorsList.size();i++){
            distance.push_back(distBtw(input,this->reprVectorsList[i]));
    }
    std::vector<float>::iterator it= min_element(distance.begin(),distance.end());

    return this->reprVectorsList[it]->code;
}


float reprVectors::distBtw(std::vector<float> input, Node* node){
    double distance=0;
    for(size_t i=0;i<node->valuesInDim.size();i++){
        distance = distance +
                    pow((node->valuesInDim[i]-input[i]),2);
    }
    return (float)pow(distance,0.5);
}

您可以从迭代器获取索引,如下所示:

    std::vector<bool> reprVectors::encode(std::vector<float> input){
    std::vector<float> distance;
    for(size_t i=0;i<this->reprVectorsList.size();i++){
            distance.push_back(distBtw(input,this->reprVectorsList[i]));
    }
    std::vector<float>::iterator it= min_element(distance.begin(),distance.end());

    return this->reprVectorsList[it]->code;
}


float reprVectors::distBtw(std::vector<float> input, Node* node){
    double distance=0;
    for(size_t i=0;i<node->valuesInDim.size();i++){
        distance = distance +
                    pow((node->valuesInDim[i]-input[i]),2);
    }
    return (float)pow(distance,0.5);
}
您可以使用:

这种方法有利于在迭代器上执行算术运算,因为它适用于所有运算符类型。

您可以使用:


此方法有利于对迭代器执行算术运算,因为它对于所有运算符类型都是有效的。

可以考虑让vector包含结构{BoL,浮标},并为它装配一些适当的运算符重写。这样,你只需要处理一个向量。你可以考虑让你的向量包含一个结构{BoL,浮标},并为它装配一些合适的运算符重写。这样你就只需要处理一个向量。+ 1,非常轻微的NITSCOPY:这是只允许随机存取迭代器,但你有它发生。注意:确切的返回类型是PrTrdFrutt,一般来说,因为它可能是负面的。@达蒙:我认为这是一个优势。作为STD::除了随机迭代器之外,还有其他的距离。+ 1,非常小的NITSCOPY:这是随机存取迭代器所允许的,不管你发生了什么。注意:确切的返回类型是pTrdIftt,一般来说,因为它可能是负的。@达蒙:我认为这是一个优势。对于除随机迭代器以外的任何对象,都启用了as std::distance。这是一个比MikMik的解决方案更好的解决方案,因为它应该支持任何迭代器,从而支持容器。@Rook!也许我应该在回答中说出来。@Rook:这是有争议的。它将针对每种迭代器类型进行编译,但对于任何不支持随机访问的迭代器,您都可以在运行时使用它。因此,-可以用作故障保护,以便在容器类型更改时重新考虑操作的成本。例如,如果它位于一个紧密的循环中,您可能更愿意维护一个手动调整的附加变量来跟踪它,而不是产生巨大的开销。@MatthieuM。它将编译并生成有效迭代器对的预期结果,但是是的,它隐藏了潜在的性能问题。这是一个比MikMik的解决方案更好的解决方案,因为它应该支持任何迭代器和容器。@Rook!也许我应该在回答中说出来。@Rook:这是有争议的。它将针对每种迭代器类型进行编译,但对于任何不支持随机访问的迭代器,您都可以在运行时使用它。因此,-可以用作故障保护,以便在容器类型更改时重新考虑操作的成本。例如,如果它位于一个紧密的循环中,您可能更愿意维护一个手动调整的附加变量来跟踪它,而不是产生巨大的开销。@MatthieuM。它将编译并生成有效迭代器对的预期结果,但是的,它隐藏了潜在的性能问题。
auto index = std::distance(distance.begin(), it);