Mam mały problem podczas korzystania z list.Lista C++ usuwa powtarzające się ciągi znaków
Co mam: Czytam linie z czatu, gdzie pojawiają się nowe linie tekstu. Zawsze pobierają ostatnie 20 linii z pola, a następnie chcę je porównać do wszystkich linii, które wcześniej pobrałem. Jeśli zostanie odkryta nowa linia, zostanie ona wysłana do zewnętrznej funkcji, która rozdzieli linię w celu dalszego przetwarzania. Zanim użyłem tablic i wektorów, ale lista wydaje się być lepszym sposobem na zrobienie tego.
Mój pomysł: Mam jedną listę o nazwie usedlines, która zawiera wszystkie stare używane linie. Lista pobranych linii zawiera najnowsze 20 linii pobranych z czatu.
Nie Po prostu chcę zapętlić obie z nich, aby sprawdzić, czy pobrane linie zawierają nową linię, która nie była wcześniej widoczna. Po pętli resztki w pobranych liniach są przenoszone do następnej funkcji.
Problem: Kiedy przełączyłem pętlę na tę pętlę, po chwili dostaję błąd. Czemu? Bonus: Czy ktoś ma lepszy pomysł na rozwiązanie tego zadania?
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);
}
}
Sprawdź 'std :: set',' std :: remove_if' i 'std :: set_intersection', aby uzyskać szybsze rozwiązanie. –