在next()
和advance()
之間的性能有任何差異嗎?我問,因爲我的代碼非常慢,我試圖找出原因。for循環中迭代器函數next()與advance()的性能
我經歷了幾個不同類型的列表,並使用for循環更新三個不同的迭代器。該代碼看起來是這樣的:
listPt3d l1; // std::list<cv::Point3d>
listlistPt2i l2; // std::list<std::list<cv::Point2i>>
listlistPt3d l3; // std::list<std::list<cv::Point3d>>
listPt3d::iterator iter1, iter1_2;
listlistPt2i::iterator iter2, iter2_2;
listlistPt3d::iterator iter3, iter3_2;
// compare lists with each other
for (iter1 = l1.begin(), iter2 = l2.begin(), iter3 = l3.begin();
iter1 != prev(l1.end());
iter1 = next(iter1), iter2 = next(iter2), iter3 = next(iter3))
{
for (iter1_2 = next(iter1), iter2_2 = next(iter2), iter3_2 = next(iter3);
iter1!= l1.end();
iter1_2 = next(iter1_2), iter2_2 = next(iter2_2), iter3_2 = next(iter3_2))
{
// whatever
}
}
我的問題是,它是否是更快地使用iterator = next(iterator)
或advance(iterator, 1)
還是這既是相同。我可以想象,由於沒有賦值運算符,所以提前更快一點。
我避免使用++
運算符,因爲我列出了列表,因此遇到了++
問題。
如果有任何其他可能性遍歷for循環,那麼請告訴我,因爲我不熟悉這些事情。謝謝。
我想,這不是真正的區別(你必須測量)。然而,你可能應該做的是用矢量替換你的列表。 – MikeMB
我不明白爲什麼'++'對你有問題。 – Lingxi
可能更重要的是「什麼」的問題 – MikeMB