在for循环中总结距离

时间:2017-07-12 13:20:36

标签: c++ for-loop vector

我有一个点矢量,我计算每个点之间的距离(P1P2,P1P3,P1P4,...... P1PN,P2P1,...,PMPN)。
现在我想要将点1的所有距离与每个其他点相加,然后将点2的所有距离相加到每个其他点,依此类推(P1P2 + P1P3 + ... + P1PN,P2P1 + P2P2 + ... + P2PN)将这些距离放入向量中。我现在陷入了我的for循环:

这是我的代码:

    // Calculate mass centers
    vector<Point2f> centroids_1;

    // Calculate distances between all mass centers
    vector<double> distance_vector;


    for (int i = 0, iend = centroids_1.size(); i < iend; i++) {
        for (int j = 0, jend = centroids_1.size(); j < jend; j++) {
            double distance = norm(centroids_1[i] - centroids_1[j]);
            distance_vector.push_back(distance);
            // Here I tried many things with for loops and while loops but 
            // I couldn't find a proper solution
        }
    }

2 个答案:

答案 0 :(得分:1)

使用标准库而不是raw循环。它将更容易阅读和维护。此外,指数是噪音。它们不是必需的用于迭代。

{{1}}

具体来说,我们使用range-based-for循环和std::accumulate。这是您想要做的事情的描述。为每个点存储它与其他点之间的累积距离。

答案 1 :(得分:0)

你没有在任何地方添加distance。在内循环的第一次迭代之后,第一个点的答案就准备就绪,你可以保存。

此外,您无需查找相同点之间的差异,因此请在i=j

时跳过
  for (int i = 0, iend = centroids_1.size(); i < iend; i++) 
  {
    double distance=0.0;
    for (int j = 0, jend = centroids_1.size(); j < jend; j++) 
        {
            if(i==j)
                continue;
            distance+ = norm(centroids_1[i] - centroids_1[j]);
        }
        distance_vector.push_back(distance);
    }
}