【发布时间】:2013-02-07 19:04:44
【问题描述】:
有一个关于如何在 C++ 中简化一些代码的问题。
所以我们在我的 CS 课程中得到了这个实验室,我们必须根据输入文件生成一个大句子,将读取的行存储在字符串列表的映射中(哇!)。我们必须使用递归函数来搜索它。
所以映射键是一个字符串。第一个列表是行的集合,第二个列表是从文件中解析出来的字符串的集合。
map<string, list<list<string> > >
我需要深入了解字符串列表以将其重构为一个字符串。我已经设置了一些迭代器来解决它,但是当它到达我的迭代器声明时,我得到了“分段错误 11”。
“语法”是已经给定输入并通过引用传递的映射。
“不完整”是一个字符串,等于传递给函数的键。
代码sn-p:
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”,我会消耗大量内存来声明所有这些"被抛出。有什么建议吗?
【问题讨论】:
-
副手,您的列表如何加载以及如何分配给包含它的地图(即索引地图来源的键来自哪个来源)?跨度>
-
程序读取格式化的外部文件。有几个括号(“{,}”)我们读取并存储到列表中。每个括号可以有几行。每个括号都有一个“定义”,其中第一行有一个包含在小于号和大于号中的单词(如 HTML)。我们将定义存储为键,然后将每一行分解为一个列表,并将所有列表存储到更大的列表中并与键配对。
-
列表
- > 是教授的建议,因为我们可能会处理一个非常大的文件。我开始认为使用向量向量可能更容易。不过不太确定。