1
    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);
}

itイテレータは、距離ベクトルの最小距離を与えてくれます。reprVectorListで対応する位置を見つけるにはどうすればよいですか?min_elementによって返されるイテレータからint/size_t値を取得するにはどうすればよいですか?

4

2 に答える 2

6

std :: distance:を使用できます

auto index = std::distance(distance.begin(), it);

このアプローチは、すべての演算子タイプに有効であるため、イテレーターで算術演算を実行するのに適しています。

于 2012-06-15T11:49:13.457 に答える
2

次のようなイテレータから「インデックス」を取得できます。

size_t index = it - distance.begin();
于 2012-06-15T11:43:08.540 に答える