gpt4 book ai didi

c++ - 如何在 std::list 中使用递归?

转载 作者:行者123 更新时间:2023-11-30 01:15:04 25 4
gpt4 key购买 nike

我在执行这段代码时遇到问题。此代码的第一个基本条件(用于在字符串列表中搜索字符串)不起作用。谢谢。

int string_check(list<string> l,list<string>::iterator it,string s)
{
if(it==l.end()) return 0;
if(*it==s) return 1;
return(string_check(l,++it,s));
}

最佳答案

您正在按值传递列表,因此 l.end() 每次都是不同列表的末尾,而不是 it 来自的列表.

通过引用传递列表;或传递结束迭代器而不是列表本身。这将是一个更灵活的解决方案,允许您将函数与特定容器类型分离并支持任何范围的输入迭代器:

template <typename InIter, typename T>
bool contains(InIter begin, InIter end, T const & value) {
if (begin == end) return false;
if (*begin == value) return true;
return contains(++begin, end, value);
}

递归通常不是一个好主意,因为堆栈通常相当小,如果溢出会导致可怕的错误。除非这是实现此类功能的练习,否则请使用迭代:

for (; begin != end; ++begin) {
if (*begin == value) return true;
}
return false;

或标准库:

return std::find(begin, end, value) != end;

关于c++ - 如何在 std::list 中使用递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29121242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com