我正在寫一個迭代點列表的算法,計算它們之間的距離並在距離太大時插入附加點。不過,我似乎缺乏與STL合適的解決方案。我希望我能學到一些東西,所以我會告訴你我的代碼。你可能對我有一些提示。地道STL:遍歷列表並插入元素
for (std::list<PathPoint>::iterator it = ++points_.begin();
it != points_.end(); it++)
{
Vector curPos = it->getPosition();
Vector prevPos = (--it)->getPosition();
Vector vecFromPrev = curPos - prevPos;
float distance = vecFromPrev.abs();
it++;
if (distance > MAX_DISTANCE_BETWEEN_POINTS)
{
int pointsToInsert = (int)(distance/MAX_DISTANCE_BETWEEN_POINTS);
Vector curPos = prevPos;
for (int i = 0; i < pointsToInsert; i++)
{
curPos += vecFromPrev/pointsToInsert;
it = points_.insert(it, PathPoint(curPos, false));
it++;
}
}
}
對我很好。雖然我會做一些事情來清楚說明'Vector'不是'std :: vector'。 –
2010-04-07 20:22:12
您正在增加'it'兩次而未檢查它是否有效。 – 2010-04-07 20:46:39
其實我不是。在循環內部,我的迭代器將始終指向有效的列表元素。然而迭代器的運動有點狂野,這是我對代碼不滿意的原因之一。 – 2010-04-07 20:56:36