Dat eerste is mogelijk, dat tweede klopt niet en het derde is gegarandeerd. Dat de nullen blijven staan mag C++ doen: de lengte van de vector is echter wel veranderd: controleer maar met vector.size():quote:Op woensdag 8 augustus 2012 21:42 schreef thenxero het volgende:
[..]
Ik krijg als output
[ code verwijderd ]
Die nullen blijven staan en de vector is dus niet kleiner geworden. Ik krijg ook geen error dat ik buiten de grenzen zit of zo.
| 1 2 3 4 5 6 | std::vector<int> a; for (int idx = 0; idx < 10; ++idx) a.push_back(idx); std::cout << "Vector size: " << a.size() << '\n'; a.clear(); std::cout << "Vector size: " << a.size() << '\n'; |
| 1 2 3 | vector<int> a; // code a = vector<int>(); // nu is a een nieuwe, lege vector |
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Met a.swap(std::vector<int>()); (a = std::vector<int>();)quote:Op woensdag 8 augustus 2012 21:43 schreef thenxero het volgende:
[..]
Met verwijderen bedoel ik dat het niet meer bestaat. Dus dat ik weer opnieuw kan zeggen:
[ code verwijderd ]
alsof ie nog niet bestaat. Of dat ik de vector weer kan gebruiken alsof hij nooit bestaan heeft.
Dit heb ik nu opgelost. Nu krijg ik geen errors/failures meer maar klopt de optelling niet meerquote:Op woensdag 8 augustus 2012 22:02 schreef thenxero het volgende:
Wacht, nu zie ik opeens iets. Ik probeer toegang te verkrijgen tot vec2[-1].
Ik denk dat het iets te maken heeft met het feit dat bij een optelling het resulterende getal soms langer wordt...quote:Op woensdag 8 augustus 2012 22:37 schreef thenxero het volgende:
Dit heb ik nu opgelost. Nu krijg ik geen errors/failures meer maar klopt de optelling niet meer. Misschien maar even pauze nemen, want ik zie niks meer.
Heheheheh, dit is eigenlijk een goede oefening. Lees hoe een vector werkt en dan krijg je door wat er hier gebeurt. Het korte antwoord is dat clear() wel goed is, en dat de []-operator geen enkele check uitvoert (want performance); als je wel boundary-checks wilt hebben, gebruik dan at(i).quote:Op woensdag 8 augustus 2012 21:42 schreef thenxero het volgende:
[..]
Ik krijg als output
[ code verwijderd ]
Die nullen blijven staan en de vector is dus niet kleiner geworden. Ik krijg ook geen error dat ik buiten de grenzen zit of zo.
Ja, had daar al voor gecorrigeerd... maar toch gaat er nog iets mis.quote:Op woensdag 8 augustus 2012 22:41 schreef GS42 het volgende:
[..]
Ik denk dat het iets te maken heeft met het feit dat bij een optelling het resulterende getal soms langer wordt...
Hier is overigens waar C++ references voor heeft geintroduceerd; gebruik beterquote:void add(vector<int>* vec1, vector<int>* vec2)
| 1 | void add(vector<int> &vec1, vector<int> &vec2) |
Thanks.quote:Op woensdag 8 augustus 2012 22:54 schreef trancethrust het volgende:
[..]
Hier is overigens waar C++ references voor heeft geintroduceerd; gebruik beter
[ code verwijderd ]
en vervang de derefs (->'s) door gewone punten voor hetzelfde resultaat (semantisch), maar schonere code (en vrijheid voor de compiler iets anders te doen dan pointers passen, mocht er iets beters te doen zijn).
Dat is vast niet zo leerzaam als dit geklooiquote:Op woensdag 8 augustus 2012 22:56 schreef thabit het volgende:
Voor grote getallen zijn er libraries zoals MPIR.
Alles kan, maar zonder ervaring kan het allemaal iets minder vlot.quote:Op woensdag 8 augustus 2012 23:56 schreef Carlos93 het volgende:
Hallo,
Ik loop al een tijd met een idee om een programma te maken in c++. Ik weet echter niet of het haalbaar is in c++. Het gaat erom dat het veel informatie van Google en social media moet weten te plukken, het te organiseren en er ook grote hoeveelheden weer kan uploaden naar de dit soort sites.
In hoeverre is dit mogelijk in c++ of raden jullie me voor dit soort toepassingen een andere programmeertaal aan?
Goed punt, en niet dat alleen; de beschrijving van C++ (een 'verbetering' op C) slaat ook de plank volledig mis. Het is een andere taal dat C als subset heeft puur omdat C veelgebruikt is. Tegenwoordige tijd. C is nog altijd populair in bij high-performance toepassingen.quote:Op woensdag 8 augustus 2012 23:28 schreef GS42 het volgende:
Trouwens, nu we toch weer richting een nieuw vervolg gaan, vind ik wel dat we het eens serieus over die OP moeten hebben. Verschillende dingen:
- Waarom die plaatjes van Dummies-boeken? Die boeken zijn toch nooit het onderwerp geweest van dit topic? Wat is het nut?
- De opmerking "beperk je niet tot [...]" is wat denigrerend. Een duidelijke omschrijving van wat voor informatie behulpzaam is bij een vraag, lijkt op z'n plaats.
- Het "vorig topic" gedeelte is toch overbodig nu het een reeks is? En maken mods het nog steeds centraal?
- Die FAQ is ... tenenkrommend slecht. Serieus, print het uit, verbrand het en begin overnieuw.
- Het "handige links" gedeelte is een goed idee, maar de uitvoering laat te wensen over. Een verzameling van goede links die in de topics zijn genoemd is echter prima.
Samenvattend: ik geloof niet dat er iets nuttigs in staat en verscheidene contra-productieve dingen. Zullen we eens een nieuwe schrijven? Wie wil wat doen?
Dat is inderdaad een onderdeel van de FAQ dat ik graag veranderd zou zien.quote:Op donderdag 9 augustus 2012 01:45 schreef trancethrust het volgende:
[..]
Goed punt, en niet dat alleen; de beschrijving van C++ (een 'verbetering' op C) slaat ook de plank volledig mis. Het is een andere taal dat C als subset heeft puur omdat C veelgebruikt is. Tegenwoordige tijd. C is nog altijd populair in bij high-performance toepassingen.
Ik zou het niet in c++ doen. De ratio werk/profijt is erg laag. Ga liever werken in visualbasic of C# (windows only) , Javascript (kan prima wat jij wil), Java (klotetaal, maar goed crossplatform te krijgen). c++ is handig als je echt programmeren wil leren of als je zeer geavanceerde technieken wil gebruiken of veel snelheid nodig hebt. Anders mijns inziens zonde van je tijd.quote:Op woensdag 8 augustus 2012 23:56 schreef Carlos93 het volgende:
Hallo,
Ik loop al een tijd met een idee om een programma te maken in c++. Ik weet echter niet of het haalbaar is in c++. Het gaat erom dat het veel informatie van Google en social media moet weten te plukken, het te organiseren en er ook grote hoeveelheden weer kan uploaden naar de dit soort sites.
In hoeverre is dit mogelijk in c++ of raden jullie me voor dit soort toepassingen een andere programmeertaal aan?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | void add(vector<int>& a, vector<int>& b) { vector<int>::iterator k; vector<int>::iterator l; for(k=b.rbegin(); k<b.rend(); ++k) { for(l=a.rbegin(); l<a.rend(); ++l) { *k+=*l; if(*k>9 && !(*k==b.rend())) { *k%=10; *(--k)-=1; } else if(*k>9 && *k==b.rend()) { a.insert(a.begin(),1); } if(l==a.rbegin()) break; } if(k==b.rbegin) break; } } |
| 1 2 3 | C:\Documents and Settings\...\C++\test\main.cpp|10|error: no match for 'operator=' in 'k = std::vector<_Tp, _Alloc>::rbegin() [with _Tp = int, _Alloc = std::allocator<int>]()'| |
Ah, dat eerste scheelt alweer een hoop errors. Heb nu geen errors meer maar het antwoord lijkt nergens op. Maar dat is logisch, heb er een rommeltje van gemaakt.quote:Op donderdag 9 augustus 2012 13:42 schreef GS42 het volgende:
De functies rbegin() en rend() leveren reverse_iterators op. Als je deze werkelijk wilt, dan moet je de declaraties van k en l veranderen van iterators naar reverse_iterators.
De fout zegt dat de compiler geen operator= kan vinden die een reverse_iterator aan een iterator-type toe kan kennen, wat natuurlijk klopt.
Waarom niet? Doen ze hier ook.quote:Let ook op dat je bij iterators geen < (of anderen) wilt gebruiken, alleen maar == en !=.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | void add(vector<int>& a, vector<int>& b) { vector<int>::reverse_iterator k; vector<int>::reverse_iterator l; k=a.rbegin(); l=b.rbegin(); while(!(k==a.rend()) && !(l==b.rend())) *k+=*l; if(*k>9 && !(k==b.rend())) { *k-=10; *(++k)++; } else if(*k>9 && k==b.rend()) { b.insert(b.begin(),1); } ++k; ++l; } |
Er zijn verschillende soorten iterators en ze ondersteunen niet allemaal dezelfde operaties. Omdat iterators vaak gebruikt worden om algemene dingen te doen (bijvoorbeeld: nieuwe elementen toevoegen aan een willekeurige container) is het het beste om jezelf aan te leren de meest algemene vorm te gebruiken, zodat je later geen rare problemen krijgt.quote:
| 1 2 3 4 | itt const end = s.end(); for (itt i = s.begin(); i != end; ++i) { // code } |
| 1 2 3 | for (size_t idx = 0; idx < a.size(); ++idx) { // code } |
Sorry.quote:Op donderdag 9 augustus 2012 14:15 schreef thenxero het volgende:
Dat ook nog. Wat een drama.... dit bewaar ik voor een regenachtige zondag.
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |