我目前正在实现Astar算法,其中每个节点都存储在向量中,然后返回给外部对象 - 就像这样:
class Astar
{
std::vector<Node> find()
{
std::vector<Node> open;
std::vector<Node> closed;
std::vector<Node> path;
//A_star algorithm working with open and closed vectors
//when path found fill path with push_back()
return path;
}
}
在外部对象中,代码看起来与以下代码类似:
class Foo
{
Astar astar;
std::vector<Node> path;
void findPath()
{
path = astar.find();
}
//do stuff with path
}
findPath()
存在的原因是我想让它在另一个线程中运行,所以如果找到路径-执行操作,否则-也许是时候找路径了(简化)。困扰我的事情是path = astar.find();
,因为它可能会有很多复制(更不用说在Astar
类中的push_back()
也会复制值)。我想到的可能解决方案是:将Foo的std :: vector & lt;Node> path;
引用作为参数传递给Astar的find()
,或者在Foo和Astar之间建立友谊,以便Foo可以访问私有路径。我优先考虑时间和内存效率(时间优先于内存)。
reserve()
来减少在find()
中的复制和移动。 - Persixty