marți, 11 iunie 2013

Tutorial C++: Vectori - Tablouri de memorie

Vectori

Un vector (array), sau tablou de memorie este o colecţie de date stocate în locaţii succesive din memorie.
Toate elementele vectorului au acelaşi tip de dată. Un vector se declară în felul următor:

tip nume[numar_elemente];
De exemplu, un vector cu 100 de întregi.
int yoyo[100];
Numărătoarea elementelor începe de la zero.
Putem accesa şi modifica un element de-al vectorului cu următoarea sintaxă:
nume[index];
De exemplu, pot atribui elementului al treilea valoarea 10.
yoyo[2] = 10;
ATENŢIE: Primul element este yoyo[0], iar ultimul este yoyo[99].
Aceşti vectori se zic statici (static arrays) deoarece numărul de elemente şi spaţiul de memorie ocupat este constant în timpul compilării. (numar_elemente trebuie să fie o constantă).
Vectorii declaraţi global, în afara oricărei funcţii, sunt iniţializaţi cu zero.
La declarare vectorii pot fi iniţializaţi, aşa cum sunt iniţializate variabilele, dar cu o sintaxă diferită.
int vec[3] = {1, 2, 3};
Sau, doar în acest caz, puteţi omite numărul de elemente:
int vec[] = {1, 2, 3};
Deoarece lungimea va fi dedusă de compilator pe baza numărului de date dintre acolade.
Parcurgerea unui vector se face cel mai simplu cu un loop, în general un for.
#include <iostream>
using namespace std;

int main()
{
    int cifrePare[] = { 0, 2, 4, 6, 8 };
    for (int i = 0; i < 5; i++)
        cout << cifrePare[i];
    return 0;
}
ATENŢIE: Accesarea elementelor din afara vectorului - cum ar fi cifrePare[5] - poate produce rezultate neaşteptate, ca instabilitatea programului sau, în cel mai rău caz, un crash al programului.

Vectori multidimensionali

Vectorii multidimensionali sunt vectori ai vectorilor. Sintaxa generală de declarare este:

tip nume[nr_elem1][nr_elem2]...[nr_elemN]
Aşa cum vedeţi, un vector poate avea oricâte dimensiuni vreţi. Totuşi, spaţiu de memorie fiind limitat, nu veţi întâlni vectori cu mai mult de 3 dimensiuni.
Un vector bidimensional poate fi imaginat ca o matrice (un tabel cu linii şi coloane).
De exemplu, matricea int mat[5][3]; are 5 linii şi 3 coloane.
În realitate, în memorie, elementele tot în ordine secvenţială sunt stocate. Vectorul (matricea) de mai sus este echivalent cu int mat[15];.
Iniţializarea este similară cu cea a vectorilor unidimensionali:
int mat[2][3] = { {1, 2, 3}, {4, 5, 6} };
Parcurgerea se face tot cu un for:
#include <iostream>
using namespace std;

int main()
{
    int cifre[2][3] = { {1, 2, 3}, {4, 5, 6} };
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++)
            cout << cifre[i][j] << ' ';
        cout << '\n';
    }
    return 0;
}
Observaţi cum se accesează elementul de pe linia i şi coloana j.
cifre[i][j];
Programul va afişa:
1 2 3
4 5 6
Primul element al matricei este cifre[0][0], adică 1.

Dacă nu vă place numărătoarea de la zero, puteţi declara vectorul cu 1 + nr_elemente, astfel încât să începeţi numărătoarea de la 1, dar să aveţi spaţiu pentru nr_elemente. Exemplu:

#include <iostream>
using namespace std;

int main()
{
    int yoyo[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    for (int i = 1; i < 10; i++)
        cout << yoyo[i] << i << ' ';
    return 0;
}
Acum indicele i coincide cu yoyo[i].
Primul element al vectorului, yoyo[0], este ignorat, şi al doilea, yoyo[1], este considerat noul prim.

Niciun comentariu:

Trimiteți un comentariu

Rețineți: Numai membrii acestui blog pot posta comentarii.