私は現在、各ノードはベクトルに格納し、その後外側のオブジェクトに返されたASTARアルゴリズムを実装している - このように:外側のオブジェクトコードのルックスで時間/メモリ効率的なSTDとの仕事::ベクトル
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;
}
}
をこれに似て: - 他に、ものを行う - 多分それはパス(簡素化)を見つけるための時間ですfindPath()
が存在する理由
class Foo
{
Astar astar;
std::vector<Node> path;
void findPath()
{
path = astar.find();
}
//do stuff with path
}
理由は、私はそれが別のスレッドで実行するようにしたいので、パスが発見された場合ということです。煩わしいのはpath = astar.find();
なのでコピーがたくさんできるので(のAstar
クラスもコピーする価値はありません)私が考えた
可能な解決策は以下のとおりです。Astar
のfind();
の引数としてはFooのstd::vector<Node> path;
参照を渡すか、民間のパスにアクセスすることができましたので、Foo
Foo
間とAstar
で友情を作ります。それ以前には、時間とメモリの効率性(メモリを超える時間)があります。
ベンチマークすれば驚くはずです。 * copy elision *と* return value optimization *に関する一般的な調査をいくつか行います。 *移動セマンティクスについてのいくつかの研究と同様に。 –
'find()'でコピーと移動を減らすために 'reserve()'を使いたいかもしれません。 – Persixty