Ich frage mich, ob es einen eingebauten oder gut etablierten Weg (zB via Lambda) gibt, um durch die Elemente einer std :: list zu gehen und alle zu finden, die zu a passen gegebener Wert? Ich weiß, dass ich alle durchlaufen kann, aber ich dachte, ich würde fragen, ob es einen Weg gibt, einen Iterator zu bekommen, der nur durch die Elemente iteriert, die bestimmten Kriterien entsprechen? Mein Beispiel unten gibt nur den Iterator für das erste übereinstimmende Element.Finden Sie alle passenden Elemente in std :: list
#include <list>
#include <algorithm>
#include <stdio.h>
int main()
{
std::list<int> List;
List.push_back(100);
List.push_back(200);
List.push_back(300);
List.push_back(100);
int findValue = 100;
auto it = std::find_if(List.begin(), List.end(), [findValue](const int value)
{
return (value == findValue);
});
if (it != List.end())
{
for (; it != List.end(); ++it)
{
printf("%d\n", * it);
}
}
return 0;
}
Danke für jede Rückmeldung.
Rufen Sie wiederholt 'find_if' an, um die verbleibenden Übereinstimmungen zu finden. Erhöhen Sie den Begin-Iterator vor jedem Aufruf (vorausgesetzt, der letzte Aufruf führte zu einer Übereinstimmung). Wenn Sie dies oft genug tun, schreiben Sie eine Funktion. Und wenn Sie nur 'operator ==' innerhalb des Prädikats verwenden, brauchen Sie 'find_if' nicht,' find' macht das für Sie. – Praetorian
* "Wenn es einen Weg gibt, einen Iterator zu bekommen, der nur die Elemente durchläuft, die einem bestimmten Kriterium entsprechen" * Vielleicht [Filter Iteratoren] (http://www.boost.org/doc/libs/1_57_0/libs/iterator/ doc/filter_iterator.html)? – dyp