Grade 10 · Subprograms (functions)Citește în română
Swapping by reference
Original: Interschimbare prin referință
The idea
We compare two functions that try to swap the values of two variables. schimbaValoare(int x, int y) receives copies, so the changes are lost when the function returns. schimbaReferinta(int &x, int &y) receives the variables of main themselves (by reference, the & sign), so the swap is still visible after the call.
Original description (Romanian)
Comparăm două funcții care încearcă să schimbe între ele valorile a două variabile. schimbaValoare(int x, int y) primește copii, deci modificările se pierd la ieșirea din funcție. schimbaReferinta(int &x, int &y) primește chiar variabilele din main (prin referință, semnul &), așa că interschimbarea se vede și după apel.
- Complexity
- O(1)
- Grade
- Grade 10 (Clasa a X-a)
- Chapter
- Subprograms (functions)
Examples
Input
3 7
Expected output
dupa transmiterea prin valoare: 3 7 dupa transmiterea prin referinta: 7 3
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* Titlu: Interschimbare prin referință
* Clasa: 10
* Capitol: Subprograme (funcții)
* Descriere: Comparăm două funcții care încearcă să schimbe între ele valorile a
* două variabile. schimbaValoare(int x, int y) primește copii, deci
* modificările se pierd la ieșirea din funcție. schimbaReferinta(int &x,
* int &y) primește chiar variabilele din main (prin referință, semnul &),
* așa că interschimbarea se vede și după apel.
* Complexitate: O(1)
*
* Exemplu
* Intrare: 3 7
* Ieșire:
* dupa transmiterea prin valoare: 3 7
* dupa transmiterea prin referinta: 7 3
*/
#include <iostream>
using namespace std;
// x și y sunt copii: schimbarea nu ajunge înapoi în main.
void schimbaValoare(int x, int y)
{
int aux = x;
x = y;
y = aux;
}
// x și y sunt alte nume pentru variabilele primite: schimbarea rămâne.
void schimbaReferinta(int &x, int &y)
{
int aux = x;
x = y;
y = aux;
}
int main()
{
int a, b;
cin >> a >> b;
schimbaValoare(a, b);
cout << "dupa transmiterea prin valoare: " << a << ' ' << b << '\n';
schimbaReferinta(a, b);
cout << "dupa transmiterea prin referinta: " << a << ' ' << b << '\n';
return 0;
}
Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.