私は簡単な質問があります。 LinkListクラスがあり、クラス内でルートが開始されています。変数がクラスで定義されている間の共有ポインタの再帰
理想的には、ノードを検索するための再帰関数を実装したかったのです。今私は、次のように実装:
bool LinkList::search_recursiveUtil(shared_ptr<node> p, int data){
if(p == nullptr){
return false;
}
if(p->data == data){
return true;
}
return search_recursiveUtil(p->next, data);
}
bool LinkList::search_recursive(int data){
shared_ptr<node> p = root;
return search_recursiveUtil(p, data);
}
は今、はっきりと私は他の機能は何かをするために、このヘッドポインタを使用する場合がありますように、rootがリンクリストの末尾に到達したくないので、私はあることがわかります共有ポインタPを取得してそれをトラバースする。今私は "search_recursive"関数に渡すpを持っているが、shared_ptr引数を取らないので、 "search_recursiveUtil"関数のサポートを取らなければならなかった。
私の質問は正しいアプローチですか?どのように私はこれをutil関数のサポートを持たないで実装できますか?
と呼ば行うことができるように
代替は、場所ノード・メンバーとして「使用率」機能することができますか?再帰的なソリューションにはほとんど利点がありません。それは信じられないほど空間的に非効率的です。 – StoryTeller
それには何も問題はありませんが、私はそれをより効率的な反復的な方法で実装します。 – MikeMB
また、値によって共有ポインタを渡すことは、const redによって支払うのに比べてかなりのオーバヘッドがあることに注意してください(もちろん、セマンティクスは異なりますが、両方とも動作します) – MikeMB