Összefoglaló a tömbökről:

1. statikus tömbök

int t1[5]; //5 hosszú statikus tömb, t[0]..t[4]
int t2[] = {-1,0,1}; //3 hosszú lesz, kezdeti értékeket is kapnak a tömbelemek
int t3[5] {0,1}; //első két elem értéket kap, a tömb vége 0-val lesz feltöltve
int n;
cin>>n;
int t4[n]; //Nem a C++ szabvány szerinti, de lefordul, a tömb mérete futási időben derül ki
int m1 [3][10]; //statikus mátrix
int n;
cin>>n;
int m2 [n][100]; //Nem szabvány, de használható
int n,m;
cin>>n>>m;
int m3[n][m]; //Lefordul, de paraméterként nem tudjuk átadni
//a tömb átadása paraméterként - paraméterátadáskor a méretét is át kell adni!
void alprogram(int [],int); //a függvény szignatúrájában elég csak a paraméterek típusát, és átadási módját jelölni
void alprogram(int x[], int meret) { ....} //a függvény definíciójakor nevet kapnak a paraméterek
alprogram(t1,5); //így hívjuk meg a t1 tömbbel az alprogramot
alprogram (m1[0],10)) //meghívhatjuk a mátrix egy sorával is
//mátrix paraméterként
void alprogram1(int x[3][10]){ ..} //megadjuk a sorok és oszlopok számát
void alprogram2(int [][10], int); //ez a fgv. szignatúrája, csak az első dimenzió lehet ismeretlen méretű
void alprogram2(int x[][10],int size) {...} //itt jönne a definíció, size - paraméter adja meg a sorok számát
alprogram2(m1,3); //meghívás m1 mátrixra
//Ezzel a tömmbbel nem tudunk olyan függvényt készíteni, hogy a meghívott függvény hozza létre a tömböt!

2. STL vector

#include <vector>
vector<int> t4(5); //öt elemű egész típusú tömb
vector< vector<float> > m2(3,vector<float>(10)); //3 x 10 -es valós típusú mátrix
//Ezzel már megoldható, hogy az alprogram hozza létre a tömböt
void beolvas(vector<int>&); //Ha az alprogram hozza létre a tömböt fontos a cím szerinti paraméter átadás!
void beolvas(vector< vector<double> >&); 
int main(){
...
vector<int> t; 
beolvas(t);
int n=t.size(); //beolvas függvény foglalta le a megfelelő méretű tömböt, itt csak lekérdezzük a méretét
...
vector< vector<double> > m;
beolvas_matrix(m);
int dim1=m.size(); //sorok száma
int dim2=m[0].size() //0. sor hossza (oszlopok száma, ha minden sor egyforma hosszú)
...
}
//Vektor létrehozása alprogrammal
void beolvas(vector<int>& x){
...
cout<<"Elemek szama.";
cin>>n;
x.resize(n);
...
}
//Mátrix létrehozása alprogrammal
void beolvas_matrix(vector< vector<double> >& x){
...
cout<<"Sorok szama:"; cin>>n;
cout<<"Oszlopok szama:"; cin>>m;
x.resize(n);
for (int i=0;i<n;++i) x[i].resize(m);
...
}

3. Dinamikus tömb

int* t1=new int[5]; //5 elemű dinamikusan létrehozott tömb
...
cout<<t1[4]<<endl; //a tömböt a szokott módon indexelhetjük
cout<<t1<<endl; //ez a tömb címét írja ki
cout<<*t1<<endl; //ez a tömb első elemének értékét írja ki
cout<<*t1+1<<endl; //ez a töm belső elemének értékét 1-gyel megnövelve írja ki
cout<<*(t1+1)<<endl; //ez a tömb második elemét írja ki
//Egy érdekes ciklus a tömb elemeinek kiírására:
for(int* mut=t1; mut<t1+5;++mut) cout<<*mut<<" ";
cout<<endl;
delete [] t1; //a tömböt "kézzel" kell felszabadítani, ha már nem kell!
cout<<t1[0]<<endl; //bizonytalan az érték, mert a tömb helyét már felszabadítottuk
//alprogrammal létrehozott dinamikus tömb - első megoldás void függvénnyel
void letrehoz_tomb(int* &, int&); //Első paraméter lesz a tömb címe, második a mérete.
//FONTOS, hogy mindkét paraméter cím szerinti! A méretet is vissza kell adni! 
int main(){
...
int* t2;
int meret;
letrehoz_tomb(t2,meret);
...
}
void letrehoz_tomb(int* & tomb, int& meret){
   cout<<"Elemszam:"; cin>>meret;
   if(meret<1) {cerr<<"hibas tombmeret"; exit(1);}
   tomb=new int[meret];
   return;
}
//alprogrammal létrehozott dinamikus tömb - második megoldás a függvény a tömb címével tér vissza
int* letrehoz_tomb2(int&); //most csak a méret lesz paraméter 
int main(){
...
int* t3;
int meret;
t3=letrehoz_tomb2(meret);
...
}
int* letrehoz_tomb2(int& meret){
   cout<<"Elemszam:"; cin>>meret;
   if(meret<1) {cerr<<"hibas tombmeret"; exit(1);}
   int* tomb=new int[meret];
   return tomb;
}

 

//mátrix létrehozása és felszabadítása
int** matrix; // mátrix mutatója
int dim1, dim2; //sorok és oszlopok száma 
cout<<"sorok szama:";
cin>>dim1;
cout<<"oszlopok szama:";
cin>>dim2;
matrix = new int*[dim1]; // minden sora egy pointert tartalmaz
for (int i = 0; i < dim1;  ++i)
    matrix[i] = new int[dim2]; // a pointerek mutatnak a sort tartalmazó tömbre
...
matrix[i][j]=... //hivatkozás a szokott módon
//mátrix felszabadítása:
for (int i = 0; i < dim1;  ++i)
    delete[] matrix[i]; // egyes tömbök törlése
delete[] matrix; // mutatótömb törlése