惯用STL:迭代列表并插入元素

Mar*_*ing 1 c++ iterator 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++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*hen 6

考虑使用adjacent_find查找迭代器位置,其中连续元素之间的距离太大,然后插入pointsToInsert项目.

http://www.sgi.com/tech/stl/adjacent_find.html

此外,您可以使用generate仿函数来填充中间点.

http://www.sgi.com/tech/stl/generate.html

不确定你想进入STL有多深:)