搜索迭代多个列表的项目

时间:2013-04-18 22:04:02

标签: c++ list iterator

我正在尝试遍历多个列表以查找“目录”。 如果我有一个目录结构,例如: / A / B / C

/ A / d / F

如果我寻找B或C似乎有效,但D和F失败了。我认为这是因为当遇到它正在搜索列表并且找不到正确的目录的情况时它会不知道要返回什么(或者如果我取消注释返回NULL,它返回null,我不想要它,因为它并不意味着它在技术上没有找到。)

即。如果我搜索F,它将搜索A / B / C而不知道返回什么。

有没有办法延迟返回值,直到找到目录或者看完它为止?

Directory* search_tree_for_dir(string dir_name) {
            for(list<Directory*>::iterator iter = this->l_dir.begin(); iter != this->l_dir.end(); iter++) {
                  // Base case: if directory found then return
                  if((*iter)->name == dir_name){
                      return *iter;
                  }
                  if(*iter != NULL) { 
                      return (*iter)->search_tree_for_dir(dir_name);
                  }
              } 
              //return NULL;
          }

1 个答案:

答案 0 :(得分:2)

您要做的是检查递归调用的返回值,并查看它返回的内容。例如:

Directory *ret = (*iter)->search_tree_for_dir(dir_name);
if (ret) {
    return ret;
}

这样,如果递归调用返回NULL以外的其他内容,您将传递它。如果它没有找到任何东西(即它返回NULL),那么你不会传递它,并继续搜索。