C++ 列表删除重复的字符串

标签 c++ list unique

我在使用列表时遇到了一个小问题。

我所拥有的:我正在阅读聊天框中的台词,其中不时出现新的文本行。 我总是从盒子中取出最后 20 行,然后我想将它们与我之前取出的所有行进行比较。如果发现新行,则将其发送到外部函数,该函数会反汇编该行以进行进一步处理。在我使用数组和 vector 之前,列表似乎是更好的方法。

我的想法:我有一个名为 usedlines 的列表,其中包含所有已使用的旧行。 列表 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);
  }

}

最佳答案

fetchedlines.remove(*f) 的调用使您的迭代器无效。

编辑:

您遇到的问题的一个可能解决方案是迭代 usedLines 并删除 fetchedlines 中包含的所有元素。

for (u = usedLines.begin() u != usedLines.end(); u++)
    fetchedLines.remove(*u);

//Process all of fetchedLines

关于C++ 列表删除重复的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4749163/

相关文章:

c++ - 程序是如何加载到 ROM 中的?

java - ArrayLists的ArrayList,如何使用内链表?

Excel为动态下拉列表创建数据验证唯一项,无需新列

python - 流媒体录制程序VLC

c++ - 在什么情况下,从 std::forward 赋值优于从 std::move 赋值?为什么?

python - 计算嵌套列表中所有元素的数量

r - 当一个变量实际上是两列时 expand.grid

mysql - 查询选择记录忽略重复项

c++ - 包装 map 迭代器的 map

c# - 从列表创建敌人