vineri, 16 decembrie 2011

Liste, Vectori si Deque in c++

Ce-s cu aceste minunatii? In princiu cu ajutorul lor se pot stoca informatii intr-un mod foarte accesibil, avand suport de Push, Insert, Clear, Extract, etc. Pentru acest tutorial am folosit g++/Linux(Ubuntu)

Avem 3 librarii:
#include <vector>
#include <list>
#include <deque>

Vectorii sunt structuri dinamice de date,liniare, stocate pe o singura zona de memorie(ca un plan continuu). Isi pot autoregla spatiul necesar stocarii datelor, pot fi accesati atat prin pointeri cat si prin adresare, pot fi iterati,etc. Sunt solutia perfecta pentru push si pop in stiva(la ultimul element), timing bun, in schimb nu sunt recomandati pentru inserari si stergeri pe pozitii din interiorul vectorului. De asemenea, pentru cantitati mari de date, se recomanda folosirea deque-urilor(vectorii prin recopiere si reasignarea memoriei pot cauza faulturi de memorie).



Observatie: Pentru folosirea acestor clase, este necesara includerea namsepaceului std
using namspace std;

Functii uzuale:
size() -Returneaza numarul de elemente din vector
max_size() - Returneaza numarul maxim de elemente pe care il poate tine vectorul(in functie de librarie/sistem de operare)
resize(int size,type element) - Redimensioneaza vectorul- Daca dimensiunea devine mai mica-Primele "size" elemente sunt copiate, restul sunt sterse. Daca este mai mare, surplusul va fi umplut cu copii ale lui "element"

Ex:
#include <vector>
#include <iostream>
using namespace std;

int main()
{
vector<int> test;
vector.resize(25,100); //Se vor adauga 25 elemente "100"-Mai pe scurt, 100 va fi adaugat de 25 de ori
vector.resize(3); // Vectorul contine 25 elemente, dintre care doar primele 3 vor fi pastrate.
cout<<vector.size()<<endl; //Afiseaza 3
return 0;
}
empty() - Verifica daca este sau nu empty:0-nu.

push_back(type element) - Adauga un element la sfarsitul stivei.
pop_back() - Sterge ultimul element al stivei
insert(vector<type>::iterator pos,element) -Insereaza un element
insert(vector<type>::iterator pos, int n,element) - Insereaza n elemente
erase(vector<type>::iterator pos) - Sterge elementul de pe pozitia pos
erase(vector<type>::iterator x, vector<type>::iterator y) - Sterge de pe pozitia x pana la y
clear() - Sterge elementele vectorului si realoca dimensiunea.
.begin() - Returneaza iterator-primul element
.end() - Returneaza iterator-ultimul element
vector<type>::iterator :
Pastreaza pozitia in vector. Este folosit pentru a specifica pozitia unui element asupra caruia o functie opereaza, cum ar fi insert, erase, etc.


Ex:
#include <vector>
#include <iostream>
using namespace std;

int main()
{
vector<int> test;
test.push_back(3) // adaug elementul 3 la sfarsit
test.push_back(4) // adaug elementul 4 la sfarsit
test.push_back(5) // adaug elementul 5 la sfarsit
test.push_back(6) // adaug elementul 6 la sfarsit  //Vectorul va contine {3,4,5,6}
test.pop_back(); //Vectorul va contine {3,4,5}
test.pop_back //Vectorul va contine {3,4}

 vector<int>::iterator i;
i=myvector.begin()+1; // Suntem pe elementul vector[1](elementul al doilea)
 test.insert(i,2);  //Vectorul va contine {3,2,4}
++i; // Pozitia a 3-a(vector[2])
test.insert(it,2,3); // Vectorul va contine: {3,2,3,3,4}
test.erase(i); //Vectorul va contine {3,2,3,4}
cout<<test[0]; // Afisam elementul de pe pozitia 1(numaratoarea e de la 0 la n-1)
test.clear(); // Curatam vectorul


return 0;
}


Deques: 
Cam acelasi lucru ca si vectorii, numai ca nu sunt pastrati doar intr-o zona de memorie. Sunt recomandati pentru lucrul cu cantitati mari de date, insert si erase. 
Singura diferenta: 
deque<int>::iterator 
De specificat este ca deque si vectors pot fi folosite impreuna(copierea de 
la unul la altul, asingarea,etc)
 
Aceleasi functii ca la vector, acelasi mod de lucru.
 
List:  
 Ca si vectorii, numai ca sunt structurati sub forma unor tablouri 
multidimensionale(se pot pastra mai multe valori/tipuri)
pe aceeasi linie.
Diferente:
list<int>::iterator si cateva functii in plus:
remove(type element)-Sterge toate elementele cu valoarea/tipul specificat
reverse() - Inverseaza elementele
unique() - Sterge dublurile
 
Mai multe: http://www.cplusplus.com/reference/stl/ 
 
 
Sper sa va fie de folos:) 

2 comentarii:

  1. A da,urmeaza un tutorial despre stack si cum functioneaza aceasta

    RăspundețiȘtergere
  2. pe mine chestiile aste ama bat grav!:D sunt un but in adevaratu sens al cuvantului desi incerc din rasputeri sa ma tratez:D!

    RăspundețiȘtergere