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; } );
Basata 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.