cpp::daily - Troca de valores e Ordenar valores de um array
Episódio 009: std::swap, std::sort e std::greater
Troca de valores
Nós sabemos que se quisermos trocar o valor de duas variáveis, basta ter uma variável temporária para armazenar o valor de uma das duas e depois atribuir o valor da primeira para a temporária, da primeira para a segunda e da segunda para temporária, assim:
Saída:
Se quisermos usar uma função precisamos passar como ponteiro ou (des)referência, pois precisamos alterar o valor armazenado no endereço da memória, se não usarmos um desses métodos, serão criadas cópias das variáveis e os valores não serão alterados, eu particularmente prefiro usar (des)referência pelo fato da implementação ser mais simples e o desempenho ser o mesmo de usar ponteiros, logo, nosso código usando função seria assim:
Saída:
Mas isso aí há uma limitação, pois só altera integer. Então teríamos que sobrecarregar a função swap() várias vezes para vários tipos, e isso é bem estranho.
Logo, poderíamos usar template:
Saída:
Mas não precisamos criar essa função sempre que quisermos fazer essa operação, a STL já possui esse recurso, basta usá-la: std::swap:
Sempre verifique se já há uma função que você deseja na STL, é mais profissional usá-la!
Ordenar valores de um array
Suponhamos que você tem um array e deseja imprimir os elementos em ordem decrescente de valor, para isso basta você armazenar o valor inicial em uma variável, comparar e fazer uma trocar std::swap, então você faria assim em um loop for aninhado:
Saída: 89 79 52 17 13 12 11 9 8 4 2
Caso queira o contrário, basta alterar o sinal de maior(>) pelo sinal de menor(<) na condição de comparação em:
Trocar isso:
Por isso:
E os valores serão impressos em ordem crescente:
Saída:
Bom, apesar desse código ser bom, a verdade é que podemos melhorar usando o std::greater e std::sort da STL.
std::sort é uma função que ordena os valor de um array.
std::greater é um objeto de função que retornar o maior valor em uma comparação.
Por padrão a função sort() ordena os valores em ordem crescente. Então se quisermos transformar o código acima usando std::sort ficaria:
Precisa incluir o #include <algorithm>
Saída: 2 4 8 9 11 12 13 17 52 79 89
A std::sort é sobrecarregada, logo, se quisermos imprimir em ordem decrescente precisamos usar o terceiro parametro com std::greater ficaria:
Saída: 89 79 52 17 13 12 11 9 8 4 2
Simples e Like a Boss!
Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !
Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!