Tengo un pequeño problema cuando uso listas.Lista de C++ eliminar cadenas duplicadas
Lo que tengo: Estoy leyendo líneas de un chat donde nuevas líneas de texto vienen de vez en cuando. Siempre busco las últimas 20 líneas del cuadro, luego quiero compararlas con todas las líneas que he buscado antes. Si se descubre una nueva línea, se envía a una función externa que desensambla la línea para su posterior procesamiento. Antes usaba matrices y vectores, pero la lista parece ser la mejor manera de hacerlo.
Mi idea: Tengo una lista llamada usedlines que contiene todas las líneas viejas ya usadas. La lista fetchedLines contiene las 20 líneas más recientes extraídas de la ventana de chat.
No, simplemente quiero pasar a través de ambos para ver si las líneas captadas contienen una nueva línea no vista anteriormente. Después del ciclo, los restos de las líneas capturadas se manejan a la siguiente función.
Problema: Cuando recorro este ciclo, obtengo un puntero malo después de un tiempo. ¿Por qué? Bonificación: ¿Alguien tiene una mejor idea para resolver esta tarea?
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);
}
}
Echa un vistazo a 'std :: set',' std :: remove_if' y 'std :: set_intersection' para una solución más rápida. –