c++ - 搜索遍历多个列表的项目

标签 c++ list iterator

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

/A/D/F

如果我寻找 B 或 C,它似乎可以工作,但对于 D 和 F 则失败。我认为这是因为当它遇到一种情况时,它正在搜索列表并且没有找到正确的目录然后它不知道要返回什么(或者如果我取消注释 return NULL,它会返回 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;
          }

最佳答案

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

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

那样的话,如果递归调用返回的不是NULL,您将继续传递它。如果它没有找到任何东西(即它返回 NULL),那么您就不会传递它,而是继续搜索。

关于c++ - 搜索遍历多个列表的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16093890/

相关文章:

c++ - 尝试在 Xcode 中编译时出现 Mach-O 错误

android - 文件的通用路径

c++ - 如何正确取消初始化 OpenSSL

c++ - OpenCV - 直接将矩阵乘法结果复制到另一个矩阵的子集

python - 如何在 Python 中压缩两个列表列表?

list - F#:递归函数:连接 2 个具有公共(public)元素的列表

c++ - 用作 std::multimap 删除范围的第一个和最后一个的递增迭代器

c++ - 在 vector 结构中显示 vector 结构

arrays - 将文字列表绑定(bind)到 SQL 查询作为返回 1 行的列?

javascript - for(x in X) 失败,但完整写出成功