gpt4 book ai didi

c++ - 构建 vector 的递归函数,将返回什么?

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

所以我试图递归地构建一个 vector ,当我看到这个时,我开始认为我做错了。下面的代码会返回一个带有每次迭代结果的 vector ,还是我只是在每次迭代中创建实际上不会在每次递归调用上构建的新 vector 。如果我错了,我该如何递归地构建 vector ...在此先感谢您的建设性帮助!

std::vector<ParameterClass> recursiveParser :: parseParamList()
{
std::vector<ParameterClass> paramVector;

if (lexicator->getCurrentToken()->getTokenType() == STRING) {

paramVector.push_back(ParameterClass(*lexicator->getCurrentToken()));
lexicator->advance();
parseParamList();

} else if (lexicator->getCurrentToken()->getTokenType() == ID) {

paramVector.push_back(ParameterClass(*lexicator->getCurrentToken()));
lexicator->advance();
parseParamList();

} else {

// so as to not fail in Expression, i need to check to see that there is a
// left paren indicating that there should be an expression

if (lexicator->getCurrentToken()->getTokenType() == LEFT_PAREN) {
paramVector.push_back(ParameterClass(parseExpression()));
lexicator->advance();
parseParamList();
}
}
return paramVector;
}

最佳答案

如果您想递归地构建列表( vector 等),请使用以下模式:

private:
void InternalBuild(std::vector<OutputData> & vec)
{
// Add data to vec
// Possibly call recursively InternalBuild(vec);
}

public:
std::vector<OutputData> RecursiveBuild()
{
std::vector<OutputData> vec;
InternalBuild(vec);
return vec;
}

值得注意的是,您似乎在这里误用了递归。递归旨在用于本质上是递归的数据结构(树、图等)。在这种情况下,您递归地处理线性数据 - 为什么不简单地编写如下内容:

while (!lexer.endOfExpression())
{
// Process token

lexer.Advance();
}

在您的情况下,如果您获得的表达式足够长,您最终会遇到堆栈溢出异常,因为您的程序将耗尽堆栈内存。如果您线性实现此算法,则不会发生这种情况。

关于c++ - 构建 vector 的递归函数,将返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22954070/

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