•BitOne
Strain
Karma: -1
Deconectat
Mesaje: 45
|
 |
« Răspunde #25 : Iunie 01, 2010, 16:37:26 » |
|
@BitOne Pentru hashing nu se comporta bine daca folosesti containerul map. Se pot folosi bibliotecile hash_set.h sau hash_map.h . Pentru a le folosi trebuie inclus namespaceul __gnu_cxx
Multumesc, dar eu chiar la hash_set/hash_map/unordered_set/unordered_map ma refeream  App: pentru versiunile de g++ >= 4.3 trebuie hash_set sau hash_map
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #26 : Iunie 01, 2010, 18:13:55 » |
|
Grija mare la hash set, pentru ca nu sunt in standard, iar atunci cand vor fi introduse se vor numi unordered set.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•devilkind
|
 |
« Răspunde #27 : Iunie 02, 2010, 00:58:36 » |
|
Eu recomand folosirea STL-ului oricand acesta face implementarea mai usoara. E mai ok sa pierzi 10 puncte la olimpiada pentru ca nu ti-a intrat in timp hash_map-ul decat sa pierzi 100 de puncte din cauza unui bug pe care nu l-ai observat din cauza ca aveai nu stiu cate sute de linii de cod.
Totodata stl-ul e util in real-life development.
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
 |
« Răspunde #28 : Iunie 02, 2010, 17:35:20 » |
|
Totusi, programele care folosesc STL au un dezavantaj cand vine vorba de debug. Eu folosesc MinGW Developer Studio si cand vreau sa fac debug nu pot sa vad nimic din ce ma intereseaza. Se poate rezolva cumva ? Si mai am o intrebare : de ce atunci cand folosesc clasa string nu pot sa afisez un sir de caractere cu printf ("%s", sir) si trebuie sa folosesc neaparat cout ? #include <stdio.h> #include <string> #include <iostream> using namespace std;
int main () { string sir = "Working with STL"; //printf ("%s ", sir); /* nu functioneaza */ cout << sir; /* functioneaza */ return 0; }
|
|
|
Memorat
|
|
|
|
•Mishu91
|
 |
« Răspunde #29 : Iunie 02, 2010, 17:38:18 » |
|
Se poate si cu printf, dar trebuie să faci ceva de genul printf("%s", sir.c_str()). Metoda c_str() convertește un string într-un char*.
|
|
|
Memorat
|
|
|
|
•BitOne
Strain
Karma: -1
Deconectat
Mesaje: 45
|
 |
« Răspunde #30 : Iunie 02, 2010, 18:00:17 » |
|
Totusi, programele care folosesc STL au un dezavantaj cand vine vorba de debug. Eu folosesc MinGW Developer Studio si cand vreau sa fac debug nu pot sa vad nimic din ce ma intereseaza. Se poate rezolva cumva ?
Din cate stiu nu ( ma rog, doar daca dai v[ i ] sau v[50] ...etc ), dar poti face un debug in visual studio sau code::blocks sau sa-ti creezi un fisier debug.txt si sa afisezi ce te intereseaza 
|
|
|
Memorat
|
|
|
|
•Mishu91
|
 |
« Răspunde #31 : Iunie 03, 2010, 07:59:19 » |
|
Totusi, programele care folosesc STL au un dezavantaj cand vine vorba de debug. Eu folosesc MinGW Developer Studio si cand vreau sa fac debug nu pot sa vad nimic din ce ma intereseaza. Se poate rezolva cumva ?
Din cate stiu nu ( ma rog, doar daca dai v[ i ] sau v[50] ...etc ), dar poti face un debug in visual studio sau code::blocks sau sa-ti creezi un fisier debug.txt si sa afisezi ce te intereseaza  Nu cred că debug.txt e soluția, pentru că dacă intră în ciclu infinit sau ia Segmentation Fault nu va apărea nimic în debug.txt (poți să îi dai câte un fflush după fiecare afișare, dar este incomod). Cel mai bine faci fprintf(stderr, "...")
|
|
|
Memorat
|
|
|
|
•BitOne
Strain
Karma: -1
Deconectat
Mesaje: 45
|
 |
« Răspunde #32 : Iunie 03, 2010, 11:18:50 » |
|
Nu cred că debug.txt e soluția, pentru că dacă intră în ciclu infinit sau ia Segmentation Fault nu va apărea nimic în debug.txt (poți să îi dai câte un fflush după fiecare afișare, dar este incomod). Cel mai bine faci fprintf(stderr, "...")
stderr este setat implicit ca si stdout ( console output ) deci tot acolo ajungem pana la urma 
|
|
|
Memorat
|
|
|
|
•devilkind
|
 |
« Răspunde #33 : Iunie 03, 2010, 11:39:16 » |
|
Nu chiar. La stderr se face flush automat, la stdout nu. Eu de obicei faceam asa freopen(stderr, "log.txt"); fprintf(stderr, "...");
|
|
|
Memorat
|
|
|
|
|
•soriyn
|
 |
« Răspunde #35 : Ianuarie 10, 2012, 17:28:05 » |
|
se poate sa am ceva de genu ? vector <int, <int,int> > x[10] ;
si daca da cum ii acesez elementele si cum folosesc, de exemplu, push_back() ?
|
|
|
Memorat
|
|
|
|
•MciprianM
|
 |
« Răspunde #36 : Ianuarie 10, 2012, 19:34:08 » |
|
Eu cred ca tu vrei sa ai un vector cu trei valori intregi. Poti face asa: struct type1 { int a,b,c; }; vector<type1> v; type1 x; x.a=2; x.b=8; x.c=1; v.push_back(x); cout << v [0].a << v [0].b << v [0].c << endl; for (vector<type1> :: iterator it = v.begin (); it != v.end (); ++ it) { cout << it->a << it->b << it->c << endl; }
Sau daca vrei sa le grupezi, dupa cum am dedus din scrierea ta: struct type2 { int a, b; }; struct type3 { int a; type2 y; }; vector<type3> v; type3 x; x.a=2; x.y.a=8; x.y.b=1; v.push_back(x); cout << v [0].a << v [0].y.b << v [0].y.c << endl; for (vector<type3> :: iterator it = v.begin (); it != v.end (); ++ it) { cout << it->a << (it->y).b << (it->y).c << endl; }
Sau cu structura pair din stl: vector<pair<int, pair<int, int> > > v; pair <int, pair <int, int> > x; x.first = 2; x.second.first=3; x.second.second=4; v.push_back (x); v.push_back(make_pair(5, make_pair(6, 7))); cout << v [0].first << v [0].second.first << v [0].second.second << endl; for (vector<pair<int, pair <int, int> > > :: iterator it = v.begin (); it != v.end (); ++ it) { cout << it->first << (it->second).first << (it->second).second << endl; }
Sau poti sa-ti faci ceva similar structurii pair din stl: template<class C1, class C2> struct pereche { C1 first; C2 second; } vector<pereche<int, pereche<int, int> > > v; pereche <int, pereche <int, int> > x; x.first = 2; x.second.first=3; x.second.second=4; v.push_back (x); cout << v [0].first << v [0].second.first << v [0].second.second << endl; for (vector<pereche<int, pereche <int, int> > > :: iterator it = v.begin (); it != v.end (); ++ it) { cout << it->first << (it->second).first << (it->second).second << endl; }
Daca ti se par prea lungi tipurile poti sa pui oricand un typedef: typedef vector <pair <int, pair <int, int> > > :: iterator vit; for (vit it = v.begin (); it != v.end (); ++ it) { cout << it->first << (it->second).first << (it->second).second << endl; }
Sau pe rand: typedef pair <int, int> pii; typedef pair<int, pii> pip; typedef vector <pip> vp; typedef vp::iterator vit; vp v; pip x; x.first = 2; x.second.first=3; x.second.second=4; v.push_back (x); v.push_back(make_pair(5, make_pair(6, 7))); cout << v [0].first << v [0].second.first << v [0].second.second << endl; for (vit it = v.begin (); it != v.end (); ++ it) { cout << it->first << (it->second).first << (it->second).second << endl; }
|
|
|
Memorat
|
|
|
|
•soriyn
|
 |
« Răspunde #37 : Ianuarie 10, 2012, 20:19:34 » |
|
Exact un vector cu trei valori vreau. Problema e ca incercasem chestia cu structura si tot primeam Segmentation fault. Apoi am rescris sursa si n-am mai avut probleme. Si voiam sa stiu daca pot scapa de acel struct. Si da, asta voiam vector<pair<int, pair<int, int> > > v;
Multumesc, m-ai luminat din nou 
|
|
|
Memorat
|
|
|
|
•dutzul
|
 |
« Răspunde #38 : Mai 21, 2012, 21:49:40 » |
|
hmm daca ma poate ajuta cnv am o intrebare legat de <set>(multiset) cum se face cu funnctia de comparare intre struct-uri eu am de exemplu Cod: using namespace std; bool comp (two a,two b) { return (a.x<b.x); } multiset <two,comp> my_set;
int main() {
f>>n; for(i=1;i<=n;++i) { f>>t.x; t.y=i; my_set.insert(t); }
f.close(); g.close(); return 0; } am incercat so fac ca si la functia sort din stl si ,nu merge si mai am intrebare cum se face accessul la un element anume; mersi anticipat
|
|
|
Memorat
|
|
|
|
•freak93
|
 |
« Răspunde #39 : Mai 21, 2012, 22:41:37 » |
|
multiset<two> my_set(comp); comp trebuie sa fie functor( cauta pe forum si ai sa gasesti). ca sa accesezi un element(daca exista) *my_set.find(ceva); unde ceva e de tipul two in cazul de fata. sper sa nu zic prostii ca e cam tarziu
|
|
|
Memorat
|
|
|
|
•dutzul
|
 |
« Răspunde #40 : Mai 22, 2012, 00:52:40 » |
|
mersi am gasit 
|
|
|
Memorat
|
|
|
|
•rgrig
|
 |
« Răspunde #41 : Iunie 27, 2012, 19:18:33 » |
|
Exact un vector cu trei valori vreau. Mai nou exista tuple. De exemplu #include <cstdio> #include <vector> #include <tuple> using namespace std; int main() { vector<tuple<int, int, char> > v; v.push_back(make_tuple(1,2,'a')); printf("%d %d %c\n", get<0>(v[0]), get<1>(v[0]), get<2>(v[0])); } se compileaza cu "g++ -std=c++0x a.cpp", cel putin cu versiunea >=4.4.3.
|
|
|
Memorat
|
|
|
|
•dutzul
|
 |
« Răspunde #42 : August 07, 2012, 01:46:48 » |
|
am o intrebare legata de functia de comparare pentru set struct compareTwo { bool cmp(const int &a,const int &b) { return a<b;} } am observat ca merge si daca scrii doar bool cmp(int a,int b) nu trebuie const si & . e posibil sa apara erori daca nu pun const? sau &?? [editat de moderator]: foloseste tag-ul "code".
|
|
« Ultima modificare: August 07, 2012, 10:06:14 de către Dragos-Alin Rotaru »
|
Memorat
|
|
|
|
•darkseeker
|
 |
« Răspunde #43 : August 07, 2012, 10:57:13 » |
|
Nu va genera nicio eroare definirea functiei ca bool cmp(int a,int b) . Totusi, cred ca merge putin mai incet programul decat acela in care functia e definita bool cmp(const int &a ,const int &b) , insa nu stiu sa-ti explic de ce.
|
|
|
Memorat
|
|
|
|
•ionut98
Strain
Karma: 2
Deconectat
Mesaje: 44
|
 |
« Răspunde #44 : Decembrie 30, 2014, 19:12:29 » |
|
salut imi poate explica cineva putin cum functioneaza iteratorii  daca se poate un exemplu cu iteratori si unul fara iteratori la acelasi lucru (la orice)
|
|
|
Memorat
|
|
|
|
•gapdan
Strain
Karma: -17
Deconectat
Mesaje: 27
|
 |
« Răspunde #45 : Ianuarie 25, 2015, 19:19:24 » |
|
Uite asa parcurgi un vector din STL cu iteratori for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it) std::cout << ' ' << *it; Adica in loc sa accesezi direct cu v ai un iterator cu care te plimbi prin memorie. Din cate am observat sunt ceva mai lenti iteratorii. Mai multe gasesti aici: http://www.cplusplus.com/reference/vector/vector/begin/
Acum stie cineva daca la ONI/OJI evaluatoarele suporta biblioteca
?
|
|
|
Memorat
|
|
|
|
|