Zei ik toch?quote:Op dinsdag 7 augustus 2012 21:14 schreef thenxero het volgende:
Volgens mij werkt ie wel gewoon goed.
edit: briljant programma!! Je kan er direct mee aan de slag. Precies wat ik zocht!
Als je je verveelt, kan je altijd op zoek gaan Herb Sutter's Exceptional C++ (en vervolg), waarin vraagstukken staan voor C++-programmeurs. Het is geen goedkoop boek, maar als je er geen problemen mee hebt, zijn er online ook pdf-versies te vinden. Sommige stukjes zijn een beetje verouderd door C++11, maar het overgrote deel is nog steeds erg nuttig.quote:
Mijn 'oplossing':quote:Op dinsdag 7 augustus 2012 20:42 schreef thenxero het volgende:
[..]
Ik wil binnenkort een keertje vraag 11 van PE aanpakken:
[..]
Daarvoor moet ik dus een matrix gaan laden. Heb er een beetje op gegoogled, maar er zijn zoveel mogelijkheden met fstream dat ik er niet echt uitkom. Maar heb eerlijk gezegd ook nog niet echt mijn best gedaan.
| 1 2 3 4 | unsigned matrix[20][20] = { { 8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8}, [...] }; |
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."Slechts diegene mag slopen die iets beters kan bouwen."
quote:Op woensdag 8 augustus 2012 15:59 schreef GS42 het volgende:
[..]
Mijn 'oplossing':
[ code verwijderd ]
Dit vond ik minder werk dan de getallen opslaan in een bestand en die daarna inladen. Nooit te moeilijk denken.En heb je dan handmatig overal komma's gezet? (Dat is wel takkenwerk)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.
Ik wou sowieso nog leren hoe ik een matrix moet laten omdat ik dat later nog wil gebruiken, dus dit was een mooi moment om het alvast te leren. Het is me ondertussen gelukt om de matrix te laden, ik krijg alleen nog het foute antwoord.
Ha, nee joh. Gewoon find/replace en de spaties vervangen door een komma en een spatie.quote:Op woensdag 8 augustus 2012 16:37 schreef thenxero het volgende:
[..]
En heb je dan handmatig overal komma's gezet? (Dat is wel takkenwerk)
Ah, dan doe je het netter dan ik.quote:Ik wou sowieso nog leren hoe ik een matrix moet laten omdat ik dat later nog wil gebruiken, dus dit was een mooi moment om het alvast te leren. Het is me ondertussen gelukt om de matrix te laden, ik krijg alleen nog het foute antwoord .
Ik was vergeten dat diagonaal ook van linksonder naar rechtsboven kan zijnquote:Op woensdag 8 augustus 2012 16:37 schreef thenxero het volgende:
[..]
Het is me ondertussen gelukt om de matrix te laden, ik krijg alleen nog het foute antwoord.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <iostream> #include <vector> using namespace std; int main() { vector<int> a; a.push_back(1); a.push_back(2); a.push_back(3); a.push_back(4); a.push_back(5); a.push_back(6); int size = a.size(); a.clear(); for(int i=0; i<size; i++) { a.push_back(0); } a.clear(); a.push_back(55); a.push_back(66); cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << " " << a[5]; return 0; } |
| 1 | fill(a.begin(), a.end(), 0); |
| 1 | cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << " " << a[5]; |
Ik krijg als outputquote:Op woensdag 8 augustus 2012 21:41 schreef GS42 het volgende:
[ code verwijderd ]
Je leest hier voorbij de grenzen van de vector. In je voorbeeld heeft a op dit moment maar 2 waarden, namelijk 55 en 66. Dus verder dan a[1] ( < a.size() ) mag je niet lezen.
En verder lijkt je code prima: met vector.clear() maak je de vector helemaal leeg.
| 1 | 55 66 0 0 0 0 |
Met verwijderen bedoel ik dat het niet meer bestaat. Dus dat ik weer opnieuw kan zeggen:quote:Op woensdag 8 augustus 2012 21:41 schreef thabit het volgende:
Je kan zoiets doen:
[ code verwijderd ]
Maar 't is me niet geheel duidelijk wat je met verwijderen bedoelt.
| 1 | vector<int> a; |
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?
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |