Meneer zit op Windows...quote:Op zondag 19 augustus 2012 12:14 schreef trancethrust het volgende:
GSL is doorgaans wat makkelijker in gebruik.
Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn. Dat lukte me niet met srand met de tijd als seed als ik het heel snel achter elkaar deed. Ik zag iedere keer ongeveer hetzelfde patroon erin zitten. Op google vond ik ook dat je voor serieuze taken beter iets anders gebruikt.quote:Op zondag 19 augustus 2012 15:04 schreef GS42 het volgende:
[..]
Misschien een beetje laat, maar over het algemeen is rand() een prima bron voor random getallen en alleen in geval van beveiliging kan ik me voorstellen dat je een betere random number generator wilt gebruiken.
Waarom heb je het idee dat de de getallen "niet zo random lijken"? En waarvoor wil je het gebruiken?
Dan wordt het ook moeilijker dan noodzakelijk.quote:
Dat komt omdat (zelfs al gebruikt je installatie een betere RNG dan de twee die ik hierboven als voorbeeld aanhaalde), doordat rand() doorgaans een linear congruential RNG (LC-RNG) is. Als ik een gok doe dan ben je bezig met monte-carlo methoden, en voor zulke punt-gebaseerde methodes kun je bewijzen dat voor elke LC-RNG altijd een dimensie d is waarvoor de gegenereerde punten rond vlakken in die d-dimensionale ruimte clusteren.quote:Op maandag 20 augustus 2012 11:56 schreef thenxero het volgende:
[..]
Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn.
...
Je gebruikt srand() toch wel maar 1 keer he? Als je rand() gebruikt in je programma, roep je maar 1 enkele keer srand() aan, als eerste statement in je main(); op een andere plek of vaker is fout.quote:Op maandag 20 augustus 2012 11:56 schreef thenxero het volgende:
[..]
Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn. Dat lukte me niet met srand met de tijd als seed als ik het heel snel achter elkaar deed. Ik zag iedere keer ongeveer hetzelfde patroon erin zitten. Op google vond ik ook dat je voor serieuze taken beter iets anders gebruikt.
ik zou sowieso zo vaak mogelijk de std functies gebruiken ipv. zelf maken of uit externe libs halenquote:Op maandag 20 augustus 2012 12:59 schreef GS42 het volgende:
[..]
Je gebruikt srand() toch wel maar 1 keer he? Als je rand() gebruikt in je programma, roep je maar 1 enkele keer srand() aan, als eerste statement in je main(); op een andere plek of vaker is fout.
Verder klopt het dat je voor serieuze taken beter een aparte library kan gebruiken, maar dan moet je wel erg serieus zijn.Ik heb bijvoorbeeld voor mijn bachelorscriptie - een implementatie van een monte-carlo (= statistische classificatie) zoekalgoritme - gewoon de rand() gebruikt zonder problemen.
| 1 2 3 4 5 6 7 8 9 | 2 2 3 3 4 2 2 5 5 6 2 3 7 7 8 2 2 2 9 3 3 10 2 5 |
Waarom geen vector gebruiken?quote:Op zondag 26 augustus 2012 11:33 schreef thenxero het volgende:
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:
[ code verwijderd ]
etcetera.
Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
Gaat het om het inlezen of om het opslaan? De oplossing voor het tweede is al gegeven door thabit: gewoon een vector gebruiken in plaats van een array. Het inlezen zou ik als volgt doen:quote:Op zondag 26 augustus 2012 11:33 schreef thenxero het volgende:
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:
[ code verwijderd ]
etcetera.
Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
Ik zou std::getline gebruiken en niet std::basic_istream::getline.quote:Op zondag 26 augustus 2012 12:06 schreef GS42 het volgende:
[..]
Gaat het om het inlezen of om het opslaan? De oplossing voor het tweede is al gegeven door thabit: gewoon een vector gebruiken in plaats van een array. Het inlezen zou ik als volgt doen:
Het bestand per regel inlezen met getline (díe getline, er is ook een andere). Per regel stop je dan de string die je hebt gelezen in een std::istringstream. Uit de stringstream kan je daarna getallen halen met operator>>.
Dan zijn we het eens: jouw getline is dezelfde als de mijne.quote:Op zondag 26 augustus 2012 13:03 schreef t4rt4rus het volgende:
[..]
Ik zou std::getline gebruiken en niet std::basic_istream::getline.
http://en.cppreference.com/w/cpp/string/basic_string/getline
Als ik op die link van je klik kom ik toch ergens anders uit.quote:Op zondag 26 augustus 2012 13:06 schreef GS42 het volgende:
[..]
Dan zijn we het eens: jouw getline is dezelfde als de mijne.
quote:Op zondag 26 augustus 2012 13:20 schreef thenxero het volgende:
De reden dat ik het met een array wilde doen is omdat ik dezelfde 'layout' wil als in dat textbestand: een 2-dimensionaal ding. Met vector heb je altijd 1 dimensie voor zover ik weet.
| 1 | std::vector< std::vector<unsigned> > |
Jahoor, vrijwel alles kan in een vector. Uit mijn hoofd is alleen een (non-throwing) copy constructor vereist.quote:Op zondag 26 augustus 2012 13:32 schreef thenxero het volgende:
Oh okay, vector in vector kan ik wel proberen (wist niet dat dat kon).
Het probleem wat ik nog heb is dat je met getline een string krijgt die de hele regel bevat. Ik weet wel dat ik met string_naam[x] toegang krijg tot element x, maar hoe scheidt ik het best alle integers?
Had je problemen met de istringstream methode? Volgens mij vraag je namelijk naar bovenstaande, maar misschien was ik onduidelijk of snap ik je vraag niet.quote:Op zondag 26 augustus 2012 12:06 schreef GS42 het volgende:
[..]
Het bestand per regel inlezen met getline (díe getline, er is ook een andere). Per regel stop je dan de string die je hebt gelezen in een std::istringstream. Uit de stringstream kan je daarna getallen halen met operator>>.
Ja klopt, ik weet niet hoe dat werkt. Een korte voorbeeldcode zou wel fijn zijn.quote:Op zondag 26 augustus 2012 13:40 schreef GS42 het volgende:
[..]
Had je problemen met de istringstream methode? Volgens mij vraag je namelijk naar bovenstaande, maar misschien was ik onduidelijk of snap ik je vraag niet.
Nou, okay dan.quote:Op zondag 26 augustus 2012 13:46 schreef thenxero het volgende:
[..]
Ja klopt, ik weet niet hoe dat werkt. Een korte voorbeeldcode zou wel fijn zijn.
| 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 <string> // for std::string, std::getline #include <fstream> // for std::ifstream #include <sstream> // for std::istringstream int main() { // open file std::ifstream file("input.txt"); // read file per line std::string line; while (std::getline(file, line)) { // now [line] contains a line from input.txt // create istringstream filled with [line] std::istringstream iss(line); // extract all numbers from [iss] unsigned temp; while (iss >> temp) std::cout << temp << ' '; std::cout << '\n'; } } |
In de OP (hebben jullie 'em al wat uitgebreid?) staat onder andere een link naar de C++ Annotations. Volgens mij is deze pagina wel nuttig. Het is geen simpele pagina, maar dan heb je wel gelijk het volledige overzicht.quote:Op zondag 26 augustus 2012 14:07 schreef thenxero het volgende:
Bedankt! Weet je misschien een site waar dit allemaal helder uitgelegd wordt? Er zijn zoveel dingen... istream ifstream ofstream ostream getline cin cout << >> stringstream dat ik de bomen door het bos niet meer zie.
'unsigned' is hetzelfde als 'unsigned int'quote:En wat betekent 'unsigned temp' precies? Ik weet wel dat je unsigned kan gebruiken in combinatie met int, bijvoorbeeld 'unsigned int'. Maar wat als er geen type na unsigned komt?
| 1 | std::ostream& operator<<(std::ostream&, const C&); |
Wat ziet er verschrikkelijk uit?quote:Op zondag 26 augustus 2012 14:22 schreef thenxero het volgende:
Het ziet er verschrikkelijk uit, maar dat zal ik maar eens gaan doorlezen dan.
Die pagina met alle streams en zo. Ik vind het in het algemeen leuk om C++ te leren, maar daar zie ik tegenop. Noodzakelijk kwaad.quote:
Het is toch overzichtelijk?quote:Op zondag 26 augustus 2012 14:46 schreef thenxero het volgende:
[..]
Die pagina met alle streams en zo. Ik vind het in het algemeen leuk om C++ te leren, maar daar zie ik tegenop. Noodzakelijk kwaad.
Ja, het is ook waar ik naar op zoek was. To the point en overzichtelijk. En er zijn ook plaatjesquote:Op zondag 26 augustus 2012 14:47 schreef t4rt4rus het volgende:
[..]
Het is toch overzichtelijk?
Wil je alles in kleurtjes en plaatjes ofzo...?
Ik vind het een vreselijke pagina. Het staat vol met grijze informatie, tekst en voorbeeldcode staat door elkaar en het document is gigantisch. Daarnaast worden hoofd- en bijzaken niet goed gescheiden waardoor je snel in de details van error- of formatting flags zit te kijken terwijl dit niet erg belangrijk is om te kunnen werken met streams.quote:Op zondag 26 augustus 2012 14:47 schreef t4rt4rus het volgende:
[..]
Het is toch overzichtelijk?
Wil je alles in kleurtjes en plaatjes ofzo...?
Gelukkig ligt het niet aan mijquote:Op zondag 26 augustus 2012 14:57 schreef GS42 het volgende:
[..]
Ik vind het een vreselijke pagina. Het staat vol met grijze informatie, tekst en voorbeeldcode staat door elkaar en het document is gigantisch. Daarnaast worden hoofd- en bijzaken niet goed gescheiden waardoor je snel in de details van error- of formatting flags zit te kijken terwijl dit niet erg belangrijk is om te kunnen werken met streams.
Maar de informatie op zich is goed en de moeite waard om er doorheen te bijten. Ik kan me alleen prima voorstellen dat 9 op de 10 mensen er niet aan beginnen. Het is een gedetailleerd overzicht, geen tutorial.
Het is inderdaad meer een documentatie.quote:Op zondag 26 augustus 2012 14:57 schreef GS42 het volgende:
[..]
Maar de informatie op zich is goed en de moeite waard om er doorheen te bijten. Ik kan me alleen prima voorstellen dat 9 op de 10 mensen er niet aan beginnen. Het is een gedetailleerd overzicht, geen tutorial.
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |