Algorytmy (Modern C++)
Dla programowania w języku Modern C++ zaleca się używanie algorytmów w podanych w standardowej bibliotece szablonów (STL).Oto kilka przykładów ważnych:
for_each, który jest domyślnym algorytmem przechodzenia. (Również transform dla semantyki not-in-place).
find_if, który jest domyślnym algorytmem wyszukiwania.
sort, lower_bound i inne domyślne algorytmy wyszukiwania i sortowania.
Aby zapisać komparator, należy użyć ściśle < i o nazwie lambdas kiedy to możliwe.
auto comp = []( const widget& w1, const widget& w2 )
{ return w1.weight() < w2.weight(); }
sort( v.begin(), v.end(), comp );
auto i = lower_bound( v.begin(), v.end(), comp );
Pętle
Jeśli to możliwe, używaj pętli opartych na zakresie for lub wywołań algorytmu, lub obu, zamiast pętli napisanych ręcznie.copy, transform, count_if, remove_if i inne podobne do tych są znacznie lepsze niż pętle odręczne, ponieważ ich zamiar jest oczywisty i ułatwiają one bezbłędne pisanie kodu.Ponadto wiele algorytmów STL ma zoptymalizowane wdrażanie, które czyni je bardziej efektywnymi.
Zamiast w starym języku C++ jak tak:
for( auto i = strings.begin(); i != strings.end(); ++i ) {
:::
:::
}
auto i = v.begin();
for( ; i != v.end(); ++i ) {
if (*i > x && *i < y) break;
}
Użyj nowoczesnego C++, podobnego do tego:
for_each( begin(strings), end(strings), []( string& s ) {
:::
:::
} );
auto i = find_if( begin(v), end(v), [=](int i) { return i > x && i < y; } );
Pętle oparte na zakresie
Bazująca na zakresie pętla for jest funkcją języka C++11, nie algorytmem STL.Ale to zasługuje na wzmiankę w tej dyskusji na temat pętli.Oparte na zakresie pętle for stanowią rozszerzenie słowa kluczowego for i zapewniają wygodny i wydajny sposób pisania pętli, które przechodzą przez zakres wartości.Kontenery STL, ciągi i tablice są gotowe do użycia przez bazujące na zakresie pętle for.Aby włączyć nową składnię iteracji dla Twojego typu zdefiniowanego przez użytkownika, należy dodać następującą obsługę:
Metoda begin, która zwraca iterację do początku struktury, i metoda end, która zwraca iterację na koniec struktury.
Wsparcie dla iteratorów dla tych metod: operator*, operator!=, i operator++ (wersja prefiks).
Te metody mogą być członkami lub funkcjami autonomicznymi.
Liczby losowe
Nie jest tajemnicą, że stara funkcja rand() środowiska CRT ma wiele wad, które zostały omówione szeroko w społeczności programistów C++.W języku Modern C++ nie masz do czynienia z tymi niedociągnięciami — ani nie musisz wymyślić własnego generator liczb losowych z równomiernym rozłożeniem, ponieważ narzędzia służące do szybkiego i łatwego tworzenia ich są dostępne w bibliotece STL, jak pokazano w temacie <random>.
Zobacz też
Inne zasoby
Zapraszamy ponownie do języka C++ (Modern C++)