funkcja find_if
Ostatnio zmodyfikowano 2016-01-17 18:09
baelish Temat założony przez niniejszego użytkownika |
funkcja find_if » 2016-01-17 14:31:05 W opisie funkcji (http://cpp0x.pl/dokumentacja/standard-C++/find_if/323) wstawiony został fragment kodu dotyczący działania funkcji find_if: #include <iostream> #include <algorithm> using namespace std;
bool isEven( int x ) { return x % 2 == 0; }
int main() { int a[ 8 ] = { 3, 7, 61, 97, 53, 666, 42, 12 }; int * it = find_if( a, a + 8, isEven ); if( it == a + 8 ) { cout << "nie znaleziono liczby parzystej\n"; } else { cout << "pierwsza liczba parzysta to " << * it << '\n'; } }
W wyniku kompilacji wyświetli się pierwsza liczba parzysta: 666. Chciałbym spytać w jaki sposób można wyświetlić wszystkie kolejne parzyste, czyli 42 i 12. |
|
j23 |
» 2016-01-17 14:50:14 int a[ 8 ] = { 3, 7, 61, 97, 53, 666, 42, 12 };
int * a1 = a; int * a2 = a1 + 8;
while(( a1 = find_if( a1, a2, isEven ) ) != a2 ) { cout << * a1 << '\n'; ++a1; }
|
|
baelish Temat założony przez niniejszego użytkownika |
find_if » 2016-01-17 15:28:04 A co w przypadku, gdy nie pracuje na tablicy tylko na liście? Poniższy kod pokazuje wyraz, który jest dłuższy niż 5 znaków. Jednak pokazuje tylko jeden wyraz, a kolejnych już nie. Jak go przerobić żeby pokazał wszystkie takie wyrazy? bool powPiec( const string & arg ) { return arg.length() > 5; int main() { list < string > lista = { "aaaa", "bbbb", "abcdeg", "ghijklm" } auto piec = find_if( lista.begin(), lista.end(), powPiec ); if( longer != lista.end() ) cout << * piec << endl; else cout << "brak wyrazow powyzej piec liter" return 0; }
|
|
j23 |
» 2016-01-17 18:09:16 Tak samo, z wyjątkiem definicji a1 i a2: auto a1 = lista.begin(); auto a2 = lista.end(); |
|
« 1 » |