Titlul: Noul Standard C++ 11 Scris de: Simoiu Robert din Ianuarie 06, 2013, 18:44:07 Am vazut pe cplusplus.com noul C standard din 2011, dar care nu este pus pe compilatoare, e doar versiunea de test sau ceva gen. Are noi librarii, si noi functii, spre ex. <array> din STL. Daca includ acest header, compilerul imi spune asa :
Cod: #ifndef _CXX0X_WARNING_H Titlul: Răspuns: Noul Standard C++ 11 Scris de: Adrian Budau din Ianuarie 06, 2013, 19:10:43 Numai una din cele 2 comenzi o sa mearga. Ele sunt pentru linux.
Daca vrei pentru 4.6 sa-ti compilezi in c++0x atunci faci asa g++ sursa.cpp -o sursa --std=gnu++0x L.E: Si se poate si pe infoarena dar inca nu am decis sa facem asta in principiu pentru ca nici olimpiada nu face asta. Titlul: Răspuns: Noul Standard C++ 11 Scris de: Simoiu Robert din Ianuarie 06, 2013, 19:16:43 Si inca 2 intrebari care ma framanta si cu asta am terminat : unordered_map este inlocuitorul lui hash_map (resp. _set), si daca da merge la olimpiada cu <tr1/un...> ? Si daca am un array mai mare, si vreau sa-l fac dinamic, la olimpiada sa nu-mi scada daca pun ch[MAX_N], in caz ca MAX_N este foarte mare, sau alte cazuri, se poate folosi vector <> declarat dinamic, pastrand viteza ?
Titlul: Răspuns: Noul Standard C++ 11 Scris de: Adrian Budau din Ianuarie 06, 2013, 19:26:48 unordered_map unordered_set sunt in standard da. Ca sa le incluzi faci #include <unordered_set> // sau map pentru map-uri.
De mentionat ca ai si unordered_multimat si unordered_multiset. In rest declararea tot al fel ramane. Daca puteai face ch[MAX_N] inainte poti si acuma. Desi e bine de stiut ca compilatorul cu -O2 face in asa fel incat un vector<> de marime MAX_N declarat din start atat de mare sa se comporta identic ca un array normal cand e vorba de viteza. Cand faci Cod: vector<int> a(1000000, 0); tot ce e in plus fata de acelasi cod folosind un array normal este o initializare a vectorului(care e O(1)) Titlul: Răspuns: Noul Standard C++ 11 Scris de: Simoiu Robert din Ianuarie 06, 2013, 19:34:54 Am inteles, daca fac unordered_set, fara tr1/ in fata, desi includ namespace-ul tr1, imi apare aceeasi eroare de la C++11, ca mai sus. Si in legatura cu array-urile, daca am program asa :
Cod: 1 <= N <= 10000 Titlul: Răspuns: Noul Standard C++ 11 Scris de: Adrian Budau din Ianuarie 06, 2013, 19:52:26 Daca vrei sa faci un vector sa aiba capacitatea cat marimea lui faci vector<int>(ch).swap(ch); daca il declarasesi pe ch ca tip vector<int>.
Nu mai trebuie sa dai using namespace tr1 in c++11. Si iti trebuie acea comanda la compilare(care merge numai pe linux, cred) --gnu=std++0x Titlul: Răspuns: Noul Standard C++ 11 Scris de: Paul-Dan Baltescu din Ianuarie 07, 2013, 06:18:08 Ce se intampla in cazul vector (c++) si ArrayList in java e ca de fiecare daca cand adaugi un element la vector si depasesti capacitatea de memorie alocatata, se mai aloca inca pe atata memorie. Asta face ca N operatii push_back sa aiba complexitatea amortizata O(N), chiar daca una poate avea complexitate O(N). (Motivul de a inmulti cu doi de fiecare data este ca 1 + 2 + 4 + ... + 2^K = 2^(K+1) - 1 = O(N) ).
Folosind g++, daca faci: Cod: vector<int> v(100); Cod: vector<int> v; Poti testa ce se intampla pe compilatorul pe care il folosesti astfel: Cod: printf("%d %d\n", v.size(), v.capacity()); Ca un comentariu final, in C++11 exista functia shrink_to_fit care ar trebui sa elibereze diferenta de memorie dintre capacity si size, dar g++ nu o implementeaza corect (de exemplu, nu functioneaza pentru vector<string>). |