Список C ++ удалить повторяющиеся строки

У меня небольшая проблема при использовании списков.

Что у меня: я читаю строки из чата, где появляются новые строки текста сейчас и потом. Я всегда беру последние 20 строк из коробки, а затем хочу сравнить их со всеми строками, которые я получил ранее. Если обнаруживается новая строка, она отправляется внешней функции, которая разбирает строку для дальнейшей обработки. Раньше я использовал массивы и векторы, но список, кажется, лучший способ сделать это.

Моя идея: у меня есть один список под названием usedlines, который содержит все старые уже использованные строки. Список fetchedLines содержит 20 самых последних строк, извлеченных из окна чата.

Нет, я просто хочу перебрать их обе, чтобы узнать, содержат ли выбранные строки новую строку, которую раньше не видели. После цикла остатки в выбранных строках передаются следующей функции.

Проблема: Когда я прохожу этот цикл, я через некоторое время получаю плохой указатель. Почему? Бонус: есть ли у кого-нибудь лучшая идея для решения этой задачи?

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);
  }

}
5
задан casablanca 20 January 2011 в 15:42
поделиться