Em troca de C ++

Em (função de comutação) permuta C ++

O valor de troca das duas variáveis ​​é simples.

Tal int a = 1, b = 2; valor de ab a troca

Isto é muito simples para encontrar uma facilmente concebíveis, tais como int temperatura variável intermédia = a; A = b; b = temperatura;

Você não pode exigir variáveis ​​intermediárias?

Claro que pode.

tais como

[Subtracção]

a = a + b; b = a - b; a = a - b;

O método pode trocar valores inteiros e de ponto flutuante das variáveis, mas podem, em lidar com a perda de precisão de ponto flutuante ocorre, por exemplo, dados:

a = 3.123456

b = 1234567.000000

Depois que o valor de troca de cada variável torna-se:

a = 1234567.000000

b = 3.125000

Obviamente, o valor original de uma perda de precisão ocorre durante a troca de um b.

[] A multiplicação e divisão

a = a * b; b = a / b; a = a / b;

 

Como multiplicação e divisão são mapeados para a adição e subtracção, operações de multiplicação e de divisão, o que é semelhante à subtracção: pode tratar inteiro e variáveis ​​de ponto flutuante, mas na variável de ponto flutuante também existe

Perda de problemas de precisão. Subtração e multiplicação e divisão para ser mais do que uma restrição: b é 0 não.

 Provavelmente em algum tipo de experiência intuitiva nos diz: adição e subtração e multiplicação e divisão pode transbordar, multiplicação e divisão e transbordo será particularmente severa. Na verdade, o uso destes dois

 O método não vai transbordar. Com adição e subtração, por exemplo, o primeiro passo da operação de adição pode causar transbordamento, mas causa um estouro do estouro estará de volta na subtração de trás.

XOR [método]

a ^ = b; // A = A ^ b

b = ^ a; // b = b ^ (a ^ b) = b ^ a ^ b = b ^ b ^ ^ a = 0 a = a

a ^ = b; // A = (a ^ b) = ^ a a ^ b ^ a = a ^ a ^ b = 0 ^ = b b

XOR método pode ser feito em troca de variáveis ​​inteiras, o tipo de ponto flutuante para a variável não se pode concluir a troca.

O segundo método tipo é mais como jogar um jogo de palavras, este método utiliza um método de incorporar no código assembly de código evita a introdução de variáveis ​​temporárias, mas a sua

Natureza ainda vai usar o espaço de armazenamento extra. Este método pode ter uma variedade, alguns estão listados abaixo:

E assim por diante ..............

Mas a estrutura desse intercâmbio deve ser necessidade menos prático para cada pedaço de dados que devem ser trocados para a estrutura, desta vez uma função é o mais simples.

C ++ fornece uma função de troca de comutação, é utilizado como se segue.

 troca incluídos no interior namespace std

 

. #Include 1 <o iostream> 
 2 #include <String> 
 . 3 #include <algorithm> cabeçalho do arquivo contém função // tipo 
 4 do using namespace std;. 
 . 5 // estudante define um tipo de estrutura 
 . 6 typedef struct Student 
 . 7 { 
 . Nome 8 de Cordas ; // nome do estudante 
 9 realização int; // desempenho do estudante 
10 estudante}; 
. 11 
12 é 
13 é 
14 
15 // função para a exibição de informação do estudante 
16 vazio Mostrar (estudante * STU, N-iNT) 
17 {. 
18 é para (int i = 0; I <n-; i ++) 
. 19 { 
20 é cout << "name:" << stu [i] .name << '\ t' << " resultados:" << stu [i] .achievement << endl;
} 21 é 
22 é} 
23 é 
24 int main () 
25 {
; 26 estudante stu [] = { { " John Doe", 99}, { "John Doe", 87}, { "rei", 100}, { "pockmarks", 60}}
27 cout << "交换前:" << endl; 
28 mostra (stu, 4); 
29 de comutação (stu [0], stu [3]); 
30 cout << "交换后:" << endl; 
31 mostra (stu, 4); 
32 retorno 0; 
33}

Copie o código

 Não se preocupe com a perda de função com precisão 

Copie o código

1 #include <iostream> 
 2 using namespace std; 
 3 int main () 
 4 { 
 5 flutuador a = 3,123456, b = 1.234.567,000000; 
 6 de troca (a, b); 
 7 cout << fixo; 
 8 cout << a << "->" << b << endl; 
 9 retorno 0; 
10}

Copie o código

 

Copie o código

1 #include <iostream> 
 2 #include <string> 
 3 usando namespace std; 
 4 int main () 
 5 { 
 6 cordas um = "666", b = "999"; 
 7 de troca (a, b); 
 8 cout << a << "->" << b << endl; 
 9 retorno 0; 
10}
Publicado 18 artigos originais · Louvor obteve 86 · vista 160 000 +

Acho que você gosta

Origin blog.csdn.net/u013178472/article/details/104968806
Recomendado
Clasificación