Finden Sie den ersten wahrheitsgemäßen Wert, der von einem Prädikat über einen Bereich zurückgegeben wirdC++

Programme in C++. Entwicklerforum
Anonymous
 Finden Sie den ersten wahrheitsgemäßen Wert, der von einem Prädikat über einen Bereich zurückgegeben wird

Post by Anonymous »

Mit einem Vektor v; und etwas bool f(T);

Code: Select all

std::any_of(v.begin(), v.end(), f);
sagt uns, ob ein Element f
erfüllt

Code: Select all

std::find_if(v.begin(), v.end(), f);
sagen Sie uns, welches Element f erfüllt
Aber nehmen wir an, ich habe std::optional g(T)
Ich möchte das erste Ergebnis des Prädikats g erhalten, das auf [v.begin(), v.end()) angewendet wird, wobei das Ergebnis has_value() (auch bekannt als „ist“) ist stimmt, stimmt).
Ich habe es ungefähr so geschrieben:

Code: Select all

template 
auto first_true(Iterator b, Iterator e, Callable && op) {
static_assert(static_cast(ResultT{}) == false,
"The default-constructed value returned by Callable must be convertible to boolean and evaluate to 'false'");

ResultT res{};
for (b; b != e; b++) {
res = op(*b);
if (res) return res;
}
return res;
};
Aber ich würde viel lieber eine std- oder boost-Funktion verwenden.
Gibt es eine Standard- oder Boost-Bibliotheksfunktion, die den ersten „wahren“ Wert zurückgibt, der vom Prädikat zurückgegeben wird?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post