向量中节点之间的长度之和

时间:2015-01-10 10:47:33

标签: c++

我有以下任务:我正在实施最便宜的插入方法,我将我的子列存储到vector。构建vector之后,我需要找到vector中包含的节点之间距离的总长度(例如,我0-32-41-3-45-0存储在vector中})。如何计算总距离?我有以下功能:

double tLength = 0;
for (vector<int>::iterator i=resultingRoute.begin(); i!=resultingRoute.end();i++)
{

    tLength+= distanceMatrix[*i][*i+1];
}
return tLength;

但它的计算范围是0到1,然后是32到33,41到42,依此类推。我需要的是0到32,32到41,41到3.我试图创建第二个迭代器j来启动at.begin()+1,但它重复了函数的第二部分。< / p>

double tLength = 0;
for (vector<int>::iterator i=resultingRoute.begin(); i!=resultingRoute.end()-1;i++)
{
    for(vector<int>::iterator j=resultingRoute.begin()+1;j!=resultingRoute.end();j++)
    {
    tLength+= distanceMatrix[*i][*j];
    }
}
return tLength;

计算游览时长的最佳方法是什么?谢谢。

1 个答案:

答案 0 :(得分:1)

  

但它从0到1计算,然后从32到33,41到42,和   等等

确实这样做,因为*i+1取值*i并为其添加1。你可能想写*(i+1)。在这种情况下,条件i!=resultingRoute.end()不正确,它应该是i!=resultingRoute.end()-1,否则*(i+1)将超出最后一个元素的范围。在进入循环之前,还应检查向量是否至少有2个元素。

你可以避免使用迭代器并使用向量,就好像它是一个数组一样,而不需要检查向量的大小:

for (size_t i = 0; i + 1 < resultingRoute.size(); ++i)
        tLength += distanceMatrix[resultingRoute[i]][resultingRoute[i+1]];