Compartilhar via


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

Hh438471.collapse_all(pt-br,VS.110).gifCom 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.

Consulte também

Outros recursos

Guia de programação C++ moderno

Referência de linguagem C++

Referência da biblioteca C++ padrão