【发布时间】:2011-01-20 15:40:25
【问题描述】:
我在使用列表时遇到了一点问题。
我所拥有的:我正在从聊天框中读取行,其中不时出现新的文本行。 我总是从盒子里取出最后 20 行,然后我想将它们与我之前取出的所有行进行比较。如果发现新行,则将其发送到外部函数,该函数将行分解以进行进一步处理。在我使用数组和向量之前,列表似乎是更好的方法。
我的想法:我有一个名为 usedlines 的列表,其中包含所有旧的 allready 行。 fetchedLines 列表包含从聊天框中获取的最新 20 行。
不,我只是想循环遍历它们以找出获取的行是否包含以前未见过的新行。在循环之后,fetchedlines 中的剩余部分被处理到下一个函数。
问题:当我循环通过这个循环时,我会在一段时间后得到一个错误指针。为什么? 奖励:有没有人有更好的想法来解决这个任务?
typedef list<string> LISTSTR;
LISTSTR::iterator f;
LISTSTR::iterator u;
LISTSTR fetchedlines;
LISTSTR usedLines;
fetchedlines.insert(fetchedlines.end(), "one");
fetchedlines.push_back("two");
fetchedlines.push_back("three");
fetchedlines.push_back("four");
fetchedlines.push_back("three");
usedLines.push_back("three");
usedLines.push_back("blää");
usedLines.push_back("lumpi");
usedLines.push_back("four");
for (u = usedLines.begin(); u != usedLines.end(); u++)
{
for (f = fetchedlines.begin(); f != fetchedlines.end(); f++)
{
if(*u==*f)
fetchedlines.remove(*f);
}
}
【问题讨论】:
-
查看
std::set、std::remove_if和std::set_intersection以获得更快的解决方案。