【发布时间】:2014-10-01 02:55:25
【问题描述】:
对于我的项目,我需要读入一个文件并计算每个字符出现的次数并将其存储在一个链表中。以下是我在程序文件部分的阅读内容:
ifstream inFile;
ofstream outFile;
inFile.open(inputfile.txt);
char ch;
list<charFrequency> charFreqList;
list<charFrequency>::iterator i;
inFile >> ch;
while (!inFile.eof())
{
charFrequency cf(ch);
charFreqList.push_back(cf);
for (i = charFreqList.begin(); i != charFreqList.end(); ++i)
{
if (i->getCharacter() == cf.getCharacter())
{
i->increment();
charFreqList.pop_back();
}
}
inFile >> ch;
}
inFile.close();
我需要程序通过,如果字符已经在链表中,它只需要增加字符的计数,但只在列表中留下一个字符实例,但是,我收到一条错误消息说明“列表迭代器不可实现”。我知道它与 pop_back() 因为它删除了最后一个元素有关,但我不知道如何避免这个问题。
提前感谢您的帮助!
【问题讨论】:
-
std::map<char, int>比使用链表更容易。 -
您需要使用列表吗?映射类型更直观,并且可能会更好地执行。
-
std::map<char,int> CharMap;...while(!inFile) { inFile >> ch; CharMap[ch]++; }如果您使用地图,这实质上就是解决这两个问题的方法。一个可怜的 2 行循环。 -
是的,很遗憾我必须使用链表。
-
@FreddyRivas - 你应该如何同时存储一个字符和一个计数?这样做的唯一方法是将结构存储在包含字符和计数器的链表中,类似于
std::list<std::pair<char, int>>。你可以使用这个吗?如果没有,请准确列出您可以使用的内容,因为我认为它不会以任何其他方式工作。
标签: c++ list linked-list