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}
Não se preocupe com a perda de função com precisão
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}
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}