O M Gquote:Op donderdag 2 augustus 2012 00:18 schreef thabit het volgende:
Punt is dat je die vectors beter als reference kunt passen in de functie, maar daar zit de fout op zich niet. Die zit namelijk hier:
[ code verwijderd ]
Je hebt k en l verwisseld.
Okee, dan zou ik me daar ook over inlezen, dit soort dingen zijn zo ongeveer hétgene waar C++ van aan elkaar hangt.quote:Op donderdag 2 augustus 2012 00:22 schreef thenxero het volgende:
[..]
O M G. Bedankt!
Ik snap niet echt wat je bedoeld met die reference. Ik weet net pas wat pointers zijn, waar ik ook het nut nog niet echt van snap.
Als hij nog niet zoveel van pointers weet dan is hij eigenlijk niet bekend met Cquote:Op donderdag 2 augustus 2012 00:31 schreef thabit het volgende:
[..]
Okee, dan zou ik me daar ook over inlezen, dit soort dingen zijn zo ongeveer hétgene waar C++ van aan elkaar hangt.
Dit is wel een goede bron voor de basics van C++ (aangenomen dat je enigszins met C bekend bent): http://www.drbio.cornell.(...)one-html/Frames.html
Bedankt. Ik ben niet bekend met C. Het enige wat ik weet is alles wat hier staat, tot het over pointers gaat. Ik heb daarmee nu de eerste 10 problemen van PE opgelost, dus ik wil nu weer verder leren.quote:Op donderdag 2 augustus 2012 00:31 schreef thabit het volgende:
[..]
Okee, dan zou ik me daar ook over inlezen, dit soort dingen zijn zo ongeveer hétgene waar C++ van aan elkaar hangt.
Dit is wel een goede bron voor de basics van C++ (aangenomen dat je enigszins met C bekend bent): http://www.drbio.cornell.(...)one-html/Frames.html
| 1 | vector<int> vereniging(vector<int> a, vector<int> b) |
| 1 | vector<int> vereniging(vector<int>& a, vector<int>& b) |
quote:Op donderdag 2 augustus 2012 13:57 schreef thabit het volgende:
[...] een reference kan niet 0 zijn [...]
| 1 | int const &a = 0; |
Okee, okee, maar de C++ standaard definieert geen null references, in tegenstelling tot Java, waar references null by default zijn en ook kunnen veranderen.quote:
Neem dan ook gelijk een constant reference, is wat netter.quote:Op donderdag 2 augustus 2012 14:08 schreef thabit het volgende:
Een toepassing van references in jouw code zou bijvoorbeeld kunnen zijn dat je
[ code verwijderd ]
vervangt door
[ code verwijderd ]
In het bovenste geval worden er bij het doorgeven van de vectoren copy-constructors op a en b uitgevoerd, en destructors bij het verlaten van de functie. In het onderste geval worden er references naar reeds bestaande vectoren doorgegeven, en hoeven er op a en b geen constructors of destructors te worden uitgevoerd.
Wordt de code daar sneller door? Of wat zijn anders de voordelen?quote:Op donderdag 2 augustus 2012 14:08 schreef thabit het volgende:
Een toepassing van references in jouw code zou bijvoorbeeld kunnen zijn dat je
[ code verwijderd ]
vervangt door
[ code verwijderd ]
In het bovenste geval worden er bij het doorgeven van de vectoren copy-constructors op a en b uitgevoerd, en destructors bij het verlaten van de functie. In het onderste geval worden er references naar reeds bestaande vectoren doorgegeven, en hoeven er op a en b geen constructors of destructors te worden uitgevoerd.
In het algemeen wel, al kan het nooit kwaad om het te testen.quote:Op donderdag 2 augustus 2012 22:27 schreef thenxero het volgende:
[..]
Wordt de code daar sneller door?
quote:Op donderdag 2 augustus 2012 13:08 schreef netolk het volgende:
Voor een goede pointer uitleg kun je ook op youtube kijken dan moet je even zoeken naar pointer fun
Ja zo heb ik het ook geleerd. Dat malloc vond ik al vaag, maar dat is dus voor C.quote:Op donderdag 2 augustus 2012 23:58 schreef t4rt4rus het volgende:
in C++ heb je trouwens iets veel beters dan malloc
Daar kan je gewoon dit doen:
int *iptr = new int;
ipv
int *iptr = malloc(sizeof(int));
| 1 2 3 4 5 6 7 | int *a = new int; int *b = new int[10]; // ... delete a; delete[] b; |
| 1 2 3 4 5 6 7 | int *a = (int*)malloc(sizeof(int)); int *b = (int*)malloc(sizeof(int)*10); //... free(a); free(b); |
Het is niet vaag. Het enigste wat het doet is memory alloceren voor waar de integer in geplaatst kan worden. Met sizeof(int) vraagt hij de grootte op van een integer in bytes. Met malloc reserveerd hij vervolgens dus die grootte.quote:Op vrijdag 3 augustus 2012 00:43 schreef thenxero het volgende:
[..]
Ja zo heb ik het ook geleerd. Dat malloc vond ik al vaag, maar dat is dus voor C.
Het nut daarvan begrijp ik nog niet echt...quote:Op vrijdag 3 augustus 2012 09:46 schreef Ai_KaRaMBa het volgende:
Let daarmee op dat je in C++ 2 soorten "free()" hebt!! Als je het verkeerd doet, krijg je memory leaks...
[ code verwijderd ]
versus
[ code verwijderd ]
| 1 2 | int *i = new int; delete[] i; |
| 1 2 3 4 | int *i = new int[4]; delete &i[3]; delete[] &i[1]; delete i; |
edit zo te zien niet...quote:Op vrijdag 3 augustus 2012 17:33 schreef t4rt4rus het volgende:
[..]
Het nut daarvan begrijp ik nog niet echt...
En was het niet zo dat je delete[] bij alles kon gebruiken?
[ code verwijderd ]
Oh wacht is het mogelijk om dit te doen?
[ code verwijderd ]
Wat versta je onder verwijderen?quote:Op vrijdag 3 augustus 2012 19:06 schreef thabit het volgende:
delete verwijdert alleen de int op plek i, delete[] verwijdert de hele array
Ik kijk wel even in mijn C++11 documentation van x aantal euro's...quote:Op vrijdag 3 augustus 2012 19:43 schreef thabit het volgende:
Wat delete precies dealloceert in dit geval is volgens mij niet door de standaard gedefinieerd. Als delete zo geïmplementeerd is dat het free() gebruikt, dan zal die waarschijnlijk de hele array dealloceren, maar dat is dus allemaal implementatie-afhankelijk.
Nee, volgens mij klopt dit niet. Opzich zijn new en delete niet lastig:quote:Op vrijdag 3 augustus 2012 19:11 schreef t4rt4rus het volgende:
[..]
Wat versta je onder verwijderen?
Volgens mij deallocaten delete en delete[] beide een array,
delete callt alleen de destructor van de eerste.
Of denk ik fout?
Hoe ver ben je? Ik heb 1 tm 10 en 12 nu gedaan. Voor 11 moet ik nog uit zien te vogelen hoe je een matrix laadt.quote:Op vrijdag 3 augustus 2012 22:06 schreef t4rt4rus het volgende:
Ik ben nu ook met Project Euler bezig.
In C++ en asm amd64.
Heb 1 en 2 vandaag gedaan.quote:Op zaterdag 4 augustus 2012 00:35 schreef thenxero het volgende:
[..]
Hoe ver ben je? Ik heb 1 tm 10 en 12 nu gedaan. Voor 11 moet ik nog uit zien te vogelen hoe je een matrix laadt.
Doe maar via DMquote:Op zaterdag 4 augustus 2012 00:37 schreef t4rt4rus het volgende:
[..]
Heb 1 en 2 vandaag gedaan.
Wil je mijn oplossing zien?
Nummer 2 is echt nice in asm
Komt dat niet gewoon doordat -9%2 geïnterpreteerd wordt als -(9%2) ?quote:Op zaterdag 4 augustus 2012 17:03 schreef thabit het volgende:
a%b heeft in C hetzelfde teken als a, dus -9 % 2 = -1 en niet 1. Dat is een nogal debiele conventie, het zou alleen van de restklasse van a moeten afhangen, niet van het teken.
Nee, de unaire - heeft prioriteit over %.quote:Op zaterdag 4 augustus 2012 18:43 schreef thenxero het volgende:
[..]
Komt dat niet gewoon doordat -9%2 geïnterpreteerd wordt als -(9%2) ?
Zover ik weet was dit vroeger afhankelijk van de implementatie: C en C++ gaven geen garanties over het teken van het resultaat als een van de argumenten van de modulo-operator negatief was.quote:Op zaterdag 4 augustus 2012 17:03 schreef thabit het volgende:
a%b heeft in C hetzelfde teken als a, dus -9 % 2 = -1 en niet 1. Dat is een nogal debiele conventie, het zou alleen van de restklasse van a moeten afhangen, niet van het teken.
Dit laat zien waarom je wel wilt dat het resultaat negatief is. Immers, je wilt dat (-10/3) * 3 + (-10%3) == -10 en dat geldt alleen als het resultaat van beide negatief is. Maar ga er in oudere C++ versies dus niet zomaar vanuit dat het resultaat werkelijk negatief is: oppassen dus.quote:5.6.4
The binary / operator yields the quotient, and the binary % operator yields the remainder from the division of the first expression by the second. If the second operand of / or % is zero the behavior is undefined. For integral operands the / operator yields the algebraic quotient with any fractional part discarded; if the quotient a/b is representable in the type of the result, (a/b)*b + a%b is equal to a.
Ik verwacht in de praktijk van niet. De compiler optimaliseert hier ongetwijfeld voor: deze zal dezelfde code genereren voor beide statements.quote:Op zaterdag 4 augustus 2012 16:25 schreef thenxero het volgende:
Bedankt, dat wist ik niet. Jouw methode is ongetwijfeld sneller omdat er niet gerekend hoeft te worden.
| 1 2 3 4 5 | 5 / 3 = 1 -5 / 3 = -1 5 % 3 = 2 -5 % 3 = -2 |
Ik heb het even getest door dergelijke expressies miljarden keren uit te voeren. Het blijkt dat de & statement 1.8 keer sneller is dan de % statement, dus er zit wel degelijk verschil in.quote:Op zaterdag 4 augustus 2012 19:05 schreef GS42 het volgende:
[..]
Ik verwacht in de praktijk van niet. De compiler optimaliseert hier ongetwijfeld voor: deze zal dezelfde code genereren voor beide statements.
Heb je optimalisatieflags meegegeven?quote:Op zaterdag 4 augustus 2012 23:57 schreef thenxero het volgende:
[..]
Ik heb het even getest door dergelijke expressies miljarden keren uit te voeren. Het blijkt dat de & statement 1.8 keer sneller is dan de % statement, dus er zit wel degelijk verschil in.
Nee, ik weet niet hoe dat werktquote:Op zondag 5 augustus 2012 00:00 schreef thabit het volgende:
[..]
Heb je optimalisatieflags meegegeven?
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |