我有像
这样的索引对象列表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)
答案 0 :(得分:1)
如果我理解你的问题:你有path
从start
到destination
的列表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
为空。