有一个关于如何在 C++ 中简化一些代码的问题。
所以我们在我的 CS 课程中得到了这个实验室,我们必须根据输入文件生成一个大句子,将读取的行存储在字符串列表列表的映射中(哇!)。我们必须使用递归函数来搜索它。
所以映射键是一个字符串。第一个列表是行的集合,第二个列表是从文件中解析的字符串的集合。
map<string, list<list<string> > >
我需要深入到字符串列表以将其重构为一个字符串。我已经设置了一些迭代器来解决它,但是当它到达我的迭代器声明时,我得到了“分段错误 11”。
“语法”是已经给定输入并通过引用传递的映射。
“不完整”是一个字符串,等于传递给函数的键。
代码片段:
string found = "";
map<string, list<list<string> > >::iterator section = grammar.find(incomplete);
list<list<string> > listItem = section->second;
list<list<string> >::iterator lIt = listItem.begin();
srand(time(NULL));
++lIt;
advance (lIt, rand() % listItem.size());
list<string> stringItem = *lIt;
while (stringItem.empty() == false){
found = found + " " + stringItem.front();
stringItem.pop_front();
}
解释 rand() 的需要:我们的第一个列表有多个列表,我们随机选择一个来生成句子。我正确使用了吗?
它停在这里。我敢肯定有一种更简单的方法可以进入该列表,但我似乎无法弄清楚,我猜如果“分段错误 11”,我会消耗大量内存来声明所有这些"被抛出。有什么建议么?