我正在编写一种算法,它遍历一个点列表,计算它们之间的距离,如果距离太大,则插入额外的点。但是,我似乎对 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++;
}
}
}
最佳答案
考虑使用 adjacent_find
找到连续元素之间距离过大的迭代器位置,然后插入 pointsToInsert
项。
http://www.sgi.com/tech/stl/adjacent_find.html
此外,您可以使用带有仿函数的generate
来填充中间点。
http://www.sgi.com/tech/stl/generate.html
不确定你想深入 STL :)
关于c++ - 惯用STL : Iterating over a list and inserting elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2595634/