Algoritmy (moderní verze jazyka C++)
Pro moderní programování C++ doporučujeme použít algoritmy v knihovně standardních šablon (STL).Zde jsou některé důležité příklady:
for_each, což je výchozí algoritmus pro procházení. (Sémantika mimo místo viz transform.)
find_if, což je výchozí algoritmus pro hledání.
sort, lower_bound a ostatní výchozí algoritmy řazení a vyhledávání.
Chcete-li zapsat komparátor, použijte přísné < a pojmenované lambda výrazy, kde je to možné.
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 );
Smyčky
Pokud je to možné, použijte smyčky for na základě rozsahu volání algoritmu nebo obojí místo ručně psané smyčky.copy, transform, count_if, remove_if a ostatní jim podobné, jsou mnohem lepší, než psané smyčky, protože jejich záměr je zřejmý a usnadňují zápis kódu bez chyb.Také mnoho algoritmů STL mají optimalizace implementace, které je zefektivňují.
Namísto starého C++, jako je tento:
for( auto i = strings.begin(); i != strings.end(); ++i ) {
:::
:::
}
auto i = v.begin();
for( ; i != v.end(); ++i ) {
if (*i > x && *i < y) break;
}
Použijte moderní C++ následujícím způsobem:
for_each( begin(strings), end(strings), []( string& s ) {
:::
:::
} );
auto i = find_if( begin(v), end(v), [=](int i) { return i > x && i < y; } );
Smyčky For vycházející z rozsahu
Smyčka for podle rozsahu je funkcí jazyka C++11, nikoli algoritmem STL.Ale to si zaslouží zmínku v této diskuzi o smyčkách.Na základě rozsahu smyček for jsou rozšíření klíčového slova for a poskytují pohodlný a účinný způsob, jak psát smyčky, které iterují v rozsahu hodnot.Kontejnery, řetězce a pole STL jsou předdefinované pro smyčky for na základě rozsahu.Chcete-li tuto novou syntaxi iterace povolit pro váš typ definovaný uživatelem, přidejte následující podporu:
Metoda begin, která vrátí iteraci na začátek struktury, a metoda end, která vrátí iteraci na konec struktury.
Podpora v iterátoru pro tyto metody: operator*, operator!= a operator++ (verze předpony).
Tyto metody mohou být členy nebo samostatné funkce.
Náhodná čísla
Je známo, že stará funkce CRT rand() má mnoho vad, které byly komunitou C+++ dlouze prodiskutovány.V moderním jazyce C++ nemusíte řešit tyto nedostatky – nemusíte ani vytvářet vlastní uniformně distribuovaný generátor náhodných čísel vzhledem k tomu, že nástroje pro jejich rychlé a snadné vytváření jsou k dispozici v STL, jak je uvedeno v <random>.
Viz také
Další zdroje
C++ vás vítá zpět (moderní verze jazyka C++)