| 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 27 28 29 30 31 32 33 34 35 36 37 38  | #include <iostream> #include <vector> using namespace std; vector<int> vereniging(vector<int> a, vector<int> b) { vector<int> c=b; for(int k=0; k<a.size(); k++) { int check=-1; int l(0); for(l=0; l<b.size(); l++) { if(a[l]==b[k]) { check++; break; } } if(check<0) { c.push_back(a[k]); } } return c; } int main() { int a[]={3,0,45,55,66}; vector<int> m; m.assign(a,a+5); int b[]={3,4}; vector<int> n; n.assign(b,b+2); cout << vereniging(m,n)[0] << endl << vereniging(m,n)[1] << endl << vereniging(m,n)[2] << endl<< vereniging(m,n)[3] << endl << vereniging(m,n)[4] << endl << vereniging(m,n)[5]; }  | 
			
			
			
			STL heeft een datatype set, zou je ook kunnen gebruiken.quote:Op woensdag 1 augustus 2012 23:58 schreef thenxero het volgende:
Ik loop weer ergens mee vast. Wat ik wil doen is de vereniging van twee willekeurig grote verzamelingen bepalen. De verzamelingen codeer ik als vectors.
			
			
			
			Wat zijn de voordelen van dat datatype? Kan je daar wel makkelijk verenigingen mee maken?quote:Op donderdag 2 augustus 2012 00:00 schreef thabit het volgende:
[..]
STL heeft een datatype set, zou je ook kunnen gebruiken.
			
			
			
			Jouw code heeft looptijd O(nm), een verzamelingendatatype kan het in O((n+m)log(n+m)).quote:Op donderdag 2 augustus 2012 00:04 schreef thenxero het volgende:
[..]
Wat zijn de voordelen van dat datatype? Kan je daar wel makkelijk verenigingen mee maken?
			
			
			
			Weet je wat copy-constructors zijn en waar ze in je code impliciet aangeroepen worden?quote:Op donderdag 2 augustus 2012 00:09 schreef thenxero het volgende:
OK dat moet ik dan maar gaan bestuderen. Zie je zo snel geen fout in mijn algoritme?
			
			
			
			Nee.quote:Op donderdag 2 augustus 2012 00:10 schreef thabit het volgende:
[..]
Weet je wat copy-constructors zijn en waar ze in je code impliciet aangeroepen worden?
			
			
			
			Onder andere, maar ook bijvoorbeeld in de functie-aanroep worden ze gebruikt, en in het returnen van die vector.quote:Op donderdag 2 augustus 2012 00:12 schreef thenxero het volgende:
[..]
Nee.
edit; even snel gegoogled, bedoel je de regel: vector<int> c=b;?
			
			
			
			| 1 | if(a[l]==b[k]) | 
			
			
			
			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;  | 
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |