我有以下任务:我正在实施最便宜的插入方法,我将我的子列存储到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;
计算游览时长的最佳方法是什么?谢谢。
答案 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]];