Pagini: [1] 2 3   În jos
  Imprimă  
Ajutor Subiect: Folosirea STL  (Citit de 13882 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« : Aprilie 02, 2008, 18:10:09 »

Am citit zilele trecute despre vectorii din STL... cu ce e mai bun un vector declarat  vector<int> v decat int v[N]?
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #1 : Aprilie 02, 2008, 18:16:02 »

Pai daca vrei sa retii un graf cu liste de adiacenta nu poti cu vectori alocati static, in shimb vector<int> face treaba Wink.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #2 : Aprilie 02, 2008, 18:28:42 »

adica vector<int> v tine loc listelor, va sa zica  Think
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #3 : Aprilie 02, 2008, 18:33:00 »

Nu tine locul listelor. Intr-un vector redimensionabil stergi/inserezi un element in O(n) pe cand intr-o lista daca esti deja pe pozitia pe care vrei stergi/inserezi in O(1).
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #4 : Aprilie 02, 2008, 18:36:39 »

v.pop_back() are complexitate O(n) ?
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #5 : Aprilie 02, 2008, 18:49:04 »

Nu, pop_back() e O(1).
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #6 : Aprilie 02, 2008, 18:53:46 »

El se referea la push_back, cred... stiam ca push_back e O(n) doar cand V.size() e putere a lui 2 (si face redimensionare)... gresesc?
Memorat
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« Răspunde #7 : Aprilie 02, 2008, 18:56:50 »

push_back() e O(1) amortizat. Intr-adevar cand vectorul se umple isi dubleaza spatiul alocat si cand este mai putin de jumatate plin isi injumatateste spatiul alocat (cred Smile ).

Cred ca se referea la erase(x) care este O(n), stergerea unui element din interiorul vectorului (x - iterator)
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #8 : Aprilie 02, 2008, 19:05:42 »

Iar daca vreau sa fac lee cu alocare dinamica de exemplu, ce e mai bine sa folosesc... vectori din stl sau liste simplu inlantuite?
Memorat
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #9 : Aprilie 02, 2008, 19:06:51 »

Vectorii cred ca ocupa mai putina memorie (la list trebuie si 2 pointeri pt prev si next) si diferenta de performanta e insesizabila Tongue
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #10 : Aprilie 02, 2008, 19:09:52 »

Oricum e mai usoara scrierea cu vectori decat cu liste  Smile Multzam fain

L.E. Cum se poate face o sortare a vectorului folosind functia sort(din stl)... care sunt parametrii
« Ultima modificare: Aprilie 02, 2008, 19:25:21 de către Andrei Misarca » Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #11 : Aprilie 02, 2008, 19:29:32 »

Oricum e mai usoara scrierea cu vectori decat cu liste  Smile Multzam fain

L.E. Cum se poate face o sortare a vectorului folosind functia sort(din stl)... care sunt parametrii

vector<int> L;
........
sort( L.begin(), L.end() );
Memorat

vid...
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #12 : Aprilie 02, 2008, 23:28:54 »

Poti intra aici pentru a te documenta.
Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #13 : Aprilie 02, 2008, 23:36:48 »

Citat

vector<int> L;
........
sort( L.begin(), L.end() );

chestia asta o folosesti cand sortezi crescator. Daca vrei sa sortezi altfel adaugi o functie de comparare:

Cod:

int cmp( tip a, tip b)
{
//returneaza 1 daca a trebuie sa apara inaintea lui b, 0 invers
}

....

sort(v.begin(), v.end(), cmp);

De asemenea poti sa folosesti pairuri pentru a evita functia de comparare. Daca ai un vector de pairuri si ii dai sort fara functie de comparare va sorta crescator dupa first si in caz de egalitate dupa second (bineinteles chestia aste merge recursiv, adik pot sa am si un vector de genu : vector< pair< pair< pair < pair <int, int> , int> ,int >, int > ).
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #14 : Aprilie 02, 2008, 23:52:13 »

Daca vrei sa sortezi descrescator poti sa dai

Cod:
sort(v.rbegin(), v.rend());
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
byndrsn
Client obisnuit
**

Karma: 19
Deconectat Deconectat

Mesaje: 72



Vezi Profilul
« Răspunde #15 : Aprilie 03, 2008, 03:50:13 »

Sau
Cod:
sort(v.begin(), v.end(), greater<int>());

Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #16 : Aprilie 03, 2008, 07:40:03 »

sau
Cod:
sort(v.begin(), v.end() );
reverse( v.begin(), v.end() );
wink
Memorat
Marius
Nu mai tace
*****

Karma: 154
Deconectat Deconectat

Mesaje: 572



Vezi Profilul
« Răspunde #17 : Aprilie 03, 2008, 22:33:33 »

Sau

http://www.cplusplus.com/reference/algorithm/sort.html

De pe www.cplusplus.com/reference am invat sa folosesc set si map, in general, STL. Mi se pare mai usor decat Sgi.
Memorat

Faceti lucrurile simplu: pe cat de simplu posibil, dar nu mai simplu.
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #18 : Aprilie 03, 2008, 23:13:55 »

Foarte tare saitu, explica foarte bine si pentru incepatori in stl si alte chestii de genu Very Happy
Memorat
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #19 : Aprilie 05, 2008, 00:34:45 »

Uitati-va si la tutorialele de pe topcoder:

http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=standardTemplateLibrary

http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=standardTemplateLibrary2
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #20 : Aprilie 06, 2008, 19:42:01 »

Am o intrebare... am fragmentu asta de cod
Cod:
vector <char *> v;

void citire()
{
  char s[100];
  scanf("%d",&n);
  for(int i=0; i<n; i++)
  {
    scanf("%s",&s);
    int k = strlen(s);
    if(s[k-1] == '\n')
      s[k-1] = 0;
    v.push_back(s);
    printf("%s\n",v.back());
  }
 
  for(vector <char *> :: iterator it = v.begin(); it!= v.end(); it++)
    printf("%s\n",*it);
}
in fisieru de intrare am
Cod:
5
asdaf
dsfsdfasdf
sadfsrcr
c
sdcsdf
si uite ce afisaza
Cod:
asdaf
dsfsdfasdf
sadfsrcr
c
sdcsdf
sdcsdf
sdcsdf
sdcsdf
sdcsdf
sdcsdf
care-i explicatia logica a faptului ca la sfarsit tot vectoru e plin doar cu ultima chestie?  Confused
Memorat
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« Răspunde #21 : Aprilie 06, 2008, 19:48:03 »

Cod:
vector <char *> v; 
Tu ai aici un vector de pointeri in care introduci de N ori adresa lui s(s este si el un pointer). Deci in final afisezi de N ori ce se afla la adresa lui s adica exact ultimul sir de carctere citit.
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #22 : Aprilie 06, 2008, 19:53:38 »

Si dak vreu sa retin in v cuvinte(siruri de caractere) cam ce ar trebui sa fac?
Memorat
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« Răspunde #23 : Aprilie 06, 2008, 20:00:02 »

Eu folosesc string pentru asta. Este si mai usor de folosit(de exemplu ai definit operatorul + pentru concatenare). Si la afisare trebuie sa faci doar ceva de genu printf("%s",x.c_str()).  Si conversia din char * in string este deja definita.
« Ultima modificare: Aprilie 06, 2008, 20:08:31 de către Adrian Diaconu » Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #24 : Aprilie 06, 2008, 20:03:27 »

Si cum se defineste?  Smile
Memorat
Pagini: [1] 2 3   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines