将列表中的元素从具有值的元素替换为以新列表结尾

时间:2013-02-24 02:36:00

标签: c++ stl

我有像

这样的索引对象列表
list<pair<int,int> > *path;

当角色到达障碍物时我需要在路径中用新路径替换从当前位置到结束但是从开始到障碍物保存路径相同(澄清一个小角色有开始和目标单元格并从开始到目的地并且后退同样重复。为了避免批量计算,我会尝试保存部分路径而没有障碍物,只需用新的障碍物来替换旧部分)。 没有迭代,有没有简单的方法可以做到这一点?

稍后编辑澄清: 路径old是[(0,0),(0,1),(1,1),(1,2),(1,3),(1,4)],障碍是在单元格(1,2)上所以字符[(0,0),(0,1),(1,1)]搜索新路径,例如[(1,1),(2,1),(2,2),( 1,3),(1,4)]所以我需要用旧路径(1,1),(1,2),(1,3),(1,4)替换为(1,1),( 2,1),(2,2),(1,3),(1,4)

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题:你有pathstartdestination的列表list<...>::iterator obstacle,它会在中间的某个地方遇到障碍(你必须知道在哪里,所以让我们说你有一个指向障碍的有效newpath。您还有一个从*(obstacle - 1)destination的{​​{1}},并且您希望将这两条路径剪切并粘贴在一起。这就是你可以做到的(我假设list而不是list*来这里,但如果你真的需要,你可以轻松地重写它以使用指针):

//kill the wrong bit of the old path
path.erase(obstacle, path.end());
//append the correct newpath
path.splice(path.end(), newpath, newpath.begin(), newpath.end());

请注意,此操作后newpath为空。