Algoritmos (modernos C++)
Para programação C++ moderna, recomendamos que você use os algoritmos do Standard Template Library (STL).Aqui estão alguns exemplos importantes:
for_each, que é o algoritmo de passagem padrão.(Também transform de semântica não no local.)
find_if, que é o algoritmo de pesquisa padrão.
sort, lower_bounde o padrão de classificação e algoritmos de pesquisa.
Para gravar um comparador, use strict < e usar chamado lambdas quando possível.
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 );
Loops
Quando possível, use com base no intervalo for loops algoritmo chamadas ou ambos, em vez de loops escritas à mão.copy, transform, count_if, remove_if, e outros como eles são muito melhores do que loops manuscritas porque sua intenção é óbvia e tornando mais fácil escrever código livre de bugs.Além disso, muitos algoritmos da STL tem otimizações de implementação que tornam mais eficiente.
Em vez de C++ antigo como este:
for( auto i = strings.begin(); i != strings.end(); ++i ) {
:::
:::
}
auto i = v.begin();
for( ; i != v.end(); ++i ) {
if (*i > x && *i < y) break;
}
Use o C++ moderno como este:
for_each( begin(strings), end(strings), []( string& s ) {
:::
:::
} );
auto i = find_if( begin(v), end(v), [=](int i) { return i > x && i < y; } );
Com base no intervalo de loops
Com o intervalo de for loop é um C + + linguagem 11 recurso, não um algoritmo da STL.Mas ele merece menção nessa discussão sobre loops.Baseado no intervalo for loops são uma extensão de for palavra-chave e fornecem uma maneira conveniente e eficiente para gravar loops iterar em um intervalo de valores.Contêineres STL, seqüências e matrizes estão prontas para o intervalo com base for loops.Para habilitar essa nova sintaxe de iteração para seu tipo definido pelo usuário, adicione o seguinte suporte:
A begin método retorna um iterador para o início da estrutura e um end método retorna um iterador para o final da estrutura.
Suporte no iterador para esses métodos: operator*, operator!=, e operator++ (versão de prefixo).
Esses métodos podem ser membros ou funções autônomas.