我目前正在实施Astar算法,其中每个节点都存储在vector中,然后返回到外部对象 - 就像这样:
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();
,因为它可能需要大量复制(更不用说push_back()
类中的Astar
也复制值了。
我想到的可能解决方案是:将Foo的std::vector<Node> path;
引用作为参数传递给Astar
的{{1}},或者在find();
和Foo
之间建立友谊所以Astar
可以访问私人路径。在我之前是时间和记忆效率(超过记忆的时间)。
答案 0 :(得分:1)
首先请记住C ++允许Return Value Optimization,因此按值返回向量本身并不是问题。
然而:
has_path(const Node& source, const Node& target)
的方法,甚至是一个具有该功能的独立函数。