У меня небольшая проблема при использовании списков.
Что у меня: я читаю строки из чата, где появляются новые строки текста сейчас и потом. Я всегда беру последние 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);
}
}