あなたの例では、反復しない、それだけで報告された場合、最初のノードの試合のt
。 openList
が空の場合、forループは決して入力されません。ループが入力されていない場合は、関数が終了する前に文が遭遇していないことに注意してください。ループの外側に偽の声明文を置くことは、これらの問題をすべて解決し、期待される動作を提供することを意味します。さらにopenList
はこの場合constにする必要があります。
bool find(pNode* t, const deque<unique_ptr<pNode>>& openList)
{
for (auto p = openList.begin(); p != openList.end(); p++)
{
if (t->x == (*p)->x && t->y == (*p)->y)
{
cout << "The coords searched for are in the open list" << endl;
return true;
}
}
return false;
}
ではなくstd::find_ifまたはrange-based for loopを使用することを検討してください。
#include <algorithm>
bool find(pNode* t, deque<unique_ptr<pNode>>& openList)
{
auto iter = std::find_if(openList.begin(), openList.end(),
[t](const unique_ptr<pNode> & p_Ptr){
return p_Ptr->x == t->x && p_Ptr->y == t->y;
});
return iter != openList.end();
}
それとも
bool find(pNode* t, const deque<unique_ptr<pNode>>& openList)
{
for (auto && ptr : openList) {
if (t->x == ptr->x && t->y == ptr->y) {
return true;
}
}
return false;
}
何openList'が空の '場合は? 'for'ループは実行されず、関数はすぐに戻ります。今、この質問に答えてみてください:この場合、何が返されますか? – ForceBru
最初の要素だけをチェックしますが、出力はキュー全体を検索することを提案しているようです... – BeyelerStudios
サイクルが繰り返されない場合、サイクルを持つ点は何ですか? – AnT