Condividi tramite


Algoritmi (C++ moderno)

Per la programmazione in C++ moderno, si consiglia di utilizzare gli algoritmi di Standard Template Library (STL).Di seguito sono riportati alcuni esempi importanti:

  • for_each, che è l'algoritmo di attraversamento predefinito.(Anche transform per la semantica dei non-in-place.)

  • find_if, che è l'algoritmo di ricerca predefinito.

  • sort, lower_bounde il predefinito di ordinamento e gli algoritmi di ricerca.

Per scrivere un comparatore, utilizzare strict < e denominato funzioni lambda quando possibile.

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 );

Cicli

Se possibile, utilizzare basata sull'intervallo for cicli o algoritmo chiamate o entrambi, invece di cicli scritta a mano.copy, transform, count_if, remove_if, e altri come queste sono decisamente migliori di cicli a mano perché l'intenzione è ovvio e rendono più semplice scrivere codice privo di errori.Inoltre, molti algoritmi di STL dispongono di ottimizzazioni di implementazione che li rendono più efficiente.

Invece di vecchio C++ simile al seguente:

for( auto i = strings.begin(); i != strings.end(); ++i ) {
  :::
  :::
}

auto i = v.begin();

for( ; i != v.end(); ++i ) {
  if (*i > x && *i < y) break;
}

Utilizzare C++ moderno simile al seguente:

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(it-it,VS.110).gifBasata sull'intervallo per i cicli

L'intervallo basato su for loop è un C + + funzionalità del linguaggio 11, non un algoritmo STL.Ma aspetto merita attenzione in questa discussione sui cicli.Basata sull'intervallo for i cicli sono un'estensione del for parola chiave e fornire un modo pratico ed efficiente per scrivere cicli in grado di scorrere un intervallo di valori.Sono già pronti per contenitori STL, stringhe e matrici basata sull'intervallo for cicli.Per attivare la nuova sintassi di iterazione per il tipo definito dall'utente, aggiungere il seguente supporto:

  • A begin metodo che restituisce un iteratore all'inizio della struttura e un end metodo che restituisce un iteratore alla fine della struttura.

  • Supporto per l'iteratore per questi metodi: operator*, operator!=, e operator++ (versione prefisso).

Questi metodi possono essere membri o funzioni autonome.

Vedere anche

Altre risorse

Digitare di nuovo a C++ (C++ moderno)

Riferimenti al linguaggio C++

Riferimento della libreria C++ standard