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ásaint** 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
|