This shows you the differences between two versions of the page.
|
sd-ca:articole:tutorial-01-1 [2016/02/24 13:14] radu.stochitoiu |
sd-ca:articole:tutorial-01-1 [2016/02/24 13:26] (current) radu.stochitoiu |
||
|---|---|---|---|
| Line 111: | Line 111: | ||
| ==== Program de test ==== | ==== Program de test ==== | ||
| + | |||
| + | In continuare vom face un program care prima data citeste n numere intr-un ResizableArray de dimensiune n, apoi mai citeste inca m numere pe care le introduce in acelasi ResizableArray pentru a demonstra realocarea, iar apoi va afisa elementele inainte si dupa sortarea acestora. | ||
| + | |||
| + | <code cpp> | ||
| + | #include <iostream> | ||
| + | #include "ResizableArray.h" | ||
| + | |||
| + | int main() { | ||
| + | // Declararea unui element de tip ResizableArray | ||
| + | ResizableArray ra; | ||
| + | |||
| + | // Initializarea (alocarea vectorului intern). Presupunem ca are o dimensiune n; | ||
| + | int n; | ||
| + | std::cout << "n = "; | ||
| + | std::cin >> n; | ||
| + | ra.init(n); | ||
| + | |||
| + | // Citirea si adaugarea a n elemente. | ||
| + | for ( int i = 0; i < n; ++i ) { | ||
| + | int x; // al i-lea element citit de la tastatura | ||
| + | std::cin >> x; | ||
| + | ra.push_back(x); | ||
| + | |||
| + | // Observatie: Capacitatea vectorului intern nu se modifica. | ||
| + | std::cout << "Dimensiune: " << ra.size << " Capacitate " << ra.capacity << '\n'; | ||
| + | } | ||
| + | |||
| + | // Afisare continut vector | ||
| + | ra.print(); | ||
| + | |||
| + | // Vom adauga in continuare inca m elemente; | ||
| + | int m; | ||
| + | std::cout << "m = "; | ||
| + | std::cin >> m; | ||
| + | for ( int i = 0; i < m; ++i ) { | ||
| + | int x; // al i-lea element citit de la tastatura | ||
| + | std::cin >> x; | ||
| + | ra.push_back(x); | ||
| + | |||
| + | // Observatie: Se poate modifica capacitatea vectorului intern! | ||
| + | std::cout << "Dimensiune: " << ra.size << " Capacitate " << ra.capacity << '\n'; | ||
| + | } | ||
| + | |||
| + | // Afisare continut vector | ||
| + | std::cout << "Inainte de sortare\n"; | ||
| + | ra.print(); | ||
| + | |||
| + | // Vom sorta elementele apoi vom afisa din nou continutul. | ||
| + | ra.sort(); | ||
| + | std::cout << "Dupa sortare\n"; | ||
| + | ra.print(); | ||
| + | |||
| + | // Eliberare memorie | ||
| + | delete[] ra.array; | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Exemplu: | ||
| + | |||
| + | <code bash> | ||
| + | n = 5 | ||
| + | 1 | ||
| + | Dimensiune: 1 Capacitate 5 | ||
| + | 7 | ||
| + | Dimensiune: 2 Capacitate 5 | ||
| + | 13 | ||
| + | Dimensiune: 3 Capacitate 5 | ||
| + | 2 | ||
| + | Dimensiune: 4 Capacitate 5 | ||
| + | 41 | ||
| + | Dimensiune: 5 Capacitate 5 | ||
| + | Continut: 1 7 13 2 41 | ||
| + | m = 6 | ||
| + | 1 | ||
| + | Dimensiune: 6 Capacitate 10 | ||
| + | 5 | ||
| + | Dimensiune: 7 Capacitate 10 | ||
| + | 2 | ||
| + | Dimensiune: 8 Capacitate 10 | ||
| + | -2 | ||
| + | Dimensiune: 9 Capacitate 10 | ||
| + | 1 | ||
| + | Dimensiune: 10 Capacitate 10 | ||
| + | 4 | ||
| + | Dimensiune: 11 Capacitate 20 | ||
| + | Inainte de sortare | ||
| + | Continut: 1 7 13 2 41 1 5 2 -2 1 4 | ||
| + | Dupa sortare | ||
| + | Continut: -2 1 1 1 2 2 4 5 7 13 41 | ||
| + | </code> | ||
| ==== Verificare cu Valgrind ==== | ==== Verificare cu Valgrind ==== | ||
| + | Pentru acelasi test rulat cu <code bash> valgrind ./main.out </code> toata memoria va fi eliberata. | ||
| + | |||
| + | <code bash> | ||
| + | ==8090== HEAP SUMMARY: | ||
| + | ==8090== in use at exit: 0 bytes in 0 blocks | ||
| + | ==8090== total heap usage: 3 allocs, 3 frees, 140 bytes allocated | ||
| + | ==8090== | ||
| + | ==8090== All heap blocks were freed -- no leaks are possible | ||
| + | ==8090== | ||
| + | ==8090== For counts of detected and suppressed errors, rerun with: -v | ||
| + | ==8090== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) | ||
| + | </code> | ||