Udostępnij za pośrednictwem


Algorytmy (C++ nowoczesny)

Nowoczesne programowania C++, zaleca się używanie algorytmów w Bibliotekę (STL).Oto niektóre ważne przykłady:

  • for_each, który jest domyślny algorytm przechodzenia.(Również transform dla semantyki nie w miejscu.)

  • find_if, który jest domyślny algorytm wyszukiwania.

  • sort, lower_boundi inne domyślne algorytmów wyszukiwania i sortowania.

Aby zapisać w komparatorze, użyj ścisłych < i o nazwie lambdas kiedy można.

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żywać oparte na zakresie for pętli lub algorytm wywołania lub zarówno zamiast odręcznego pętli.copy, transform, count_if, remove_if, oraz inne osoby takie są znacznie lepiej niż odręczny pętli, ponieważ ich zamiarem jest oczywiste i one ułatwić pisanie kodu wolne od błędów.Ponadto wiele algorytmów STL mają optymalizacji wdrażania, które czynią je bardziej efektywne.

Zamiast starych C++ następująco:

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 nowoczesnych języka C++ to:

for_each( begin(strings), end(strings), []( string& s ) {
  :::
  :::
} );
auto i = find_if( begin(v), end(v),  [=](int i) { return i > x && i < y; }  );

Hh438471.collapse_all(pl-pl,VS.110).gifZakres oparty na pętle

Na zakres for pętli jest C ++ funkcji języka 11, nie algorytm STL.Ale zasługuje na wzmiankę w tej dyskusji o pętli.Oparte na zakresie for pętli stanowią rozszerzenie for słowa kluczowego i zapewniają wygodny i skuteczny sposób zapisu pętli, które iteracyjne zakres wartości.Pojemniki STL, ciągi i tablice są gotowe do oparte na zakresie for pętli.Aby włączyć to nowe elementy składni iteracji typu zdefiniowane przez użytkownika, należy dodać obsługę następujących:

  • A begin metodę, która zwraca iterację do początku struktury i end metodę, która zwraca iterację na koniec struktury.

  • Wsparcie w iteratora dla tych metod: operator*, operator!=, i operator++ (wersja prefiksu).

Metody te można członków lub funkcji autonomicznych.

Zobacz też

Inne zasoby

Nowoczesne C++ Programming Guide

Skorowidz języka C++

Biblioteka języka C++ wzorcowego