abonnement Unibet Coolblue Bitvavo
pi_115202628
quote:
0s.gif Op maandag 6 augustus 2012 20:05 schreef thenxero het volgende:

[..]

Dat snap ik niet helemaal. Ik dacht dat je in C++ dan die GUI moest programmeren. Hoe zit dat dan?
Qt is een library die je een API geeft om cross-platform (mobiel, linux, windows, OS X, ...) GUIs te ontwikkelen (andere I/O is ook supported). Andere libraries zijn er natuurlijk ook, bv. linux' X11 API, de Windows API, Java Swing, enzovoorts; sommige zijn beschikbaar voor C, anderen niet.

C(++) als standaard heeft zelf geen inherente manier om GUIs te maken.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115246749
Heb zelf qt tools geinstalleerd.
Volgens mij kan je dat wel leren thenxero.
pi_115255142
Ik zit nu te klooien met C#. Daar kan je ook vrij makkelijk windowtjes oproepen met wat text en knoppen erin.
pi_115255811
quote:
0s.gif Op dinsdag 7 augustus 2012 20:11 schreef thenxero het volgende:
Ik zit nu te klooien met C#. Daar kan je ook vrij makkelijk windowtjes oproepen met wat text en knoppen erin.
Heeft niet veel met de taal te maken.
Dat is gewoon welke libraries er standaard worden bij geleverd.
C++ is gelukkig geen taal waar dat soort dingen standaard inzitten.
Wel hebben we STL en STD.

Maar is gewoon een kwestie van libaries. C# heeft standaard een library waarmee je windows kan maken.
Met C++ en bijvoorbeeld qt kan je ook heel makkelijk windows maken.
pi_115256088
Ik ga het nu downloaden
pi_115256703
quote:
14s.gif Op dinsdag 7 augustus 2012 20:27 schreef thenxero het volgende:
Ik ga het nu downloaden
Cool.

Heb je nog vragen over C++? :P
pi_115256899
quote:
0s.gif Op dinsdag 7 augustus 2012 20:38 schreef t4rt4rus het volgende:

[..]

Cool.

Heb je nog vragen over C++? :P
Ik wil binnenkort een keertje vraag 11 van PE aanpakken:
quote:
What is the greatest product of four adjacent numbers on the same straight line in the 20 by 20 grid? [grid van getallen]
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.
pi_115257263
Wat is dit nou weer. Ben ik bezig met Qt installeren, krijg ik dit:



Uiteindelijk maar op Ignore gedrukt want Retry haalt niks uit.
pi_115257809
Vreemd,
deze error komt vaker voor zo te zien.
Moet je maar wachten op een update.

Mijn aptitude install qt4-etc... ging heel snel. :P
pi_115258741
Volgens mij werkt ie wel gewoon goed.

edit: briljant programma!! Je kan er direct mee aan de slag. Precies wat ik zocht!

[ Bericht 55% gewijzigd door thenxero op 07-08-2012 21:35:21 ]
pi_115260481
quote:
0s.gif 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!
Zei ik toch? :P
Maar mooi dat het bevalt.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115283667
quote:
0s.gif Op dinsdag 7 augustus 2012 20:38 schreef t4rt4rus het volgende:

Heb je nog vragen over C++? :P
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.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115292673
quote:
0s.gif 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.
Mijn 'oplossing':

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},
    [...]
};

Dit vond ik minder werk dan de getallen opslaan in een bestand en die daarna inladen. Nooit te moeilijk denken. :)

SPOILER
Om 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."
pi_115294434
quote:
0s.gif 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. :)

SPOILER
Om 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.
En heb je dan handmatig overal komma's gezet? (Dat is wel takkenwerk)

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 :P .
pi_115294916
quote:
0s.gif Op woensdag 8 augustus 2012 16:37 schreef thenxero het volgende:

[..]

En heb je dan handmatig overal komma's gezet? (Dat is wel takkenwerk)
Ha, nee joh. Gewoon find/replace en de spaties vervangen door een komma en een spatie.

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 .
Ah, dan doe je het netter dan ik. :P
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115294956
Voor dat soort dingen is Python's "eval" function een uitkomst. Die neemt een string als input, en voert die string uit als Python code.
pi_115296847
Ik hou het voorlopig even bij C++
pi_115297461
quote:
0s.gif 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 :P .
Ik was vergeten dat diagonaal ook van linksonder naar rechtsboven kan zijn :') . Nu wel goed :) .
pi_115308700
Is het mogelijk om een vector te verwijderen? Ik heb zitten klooien met vector::erase en vector::clear, maar de waardes blijven staan. Het enige wat er volgens mij verandert is dat als je vector::push_back gebruikt dat hij de oude vector overschrijft.

Voor mijn doeleinden zou het ook genoeg zijn om de hele vector in nullen te veranderen en dan weer overschrijfbaar te maken. Dit kan ik wel doen op zo'n manier, maar dat lijkt me onnodig omslachtig:
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;
}
pi_115309062
Je kan zoiets doen:
1fill(a.begin(), a.end(), 0);
Maar 't is me niet geheel duidelijk wat je met verwijderen bedoelt.
pi_115309078
1    cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << " " << a[4] << " " << a[5];

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.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115309132
quote:
0s.gif 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.
Ik krijg als output

155 66 0 0 0 0

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 :? .
pi_115309172
quote:
0s.gif 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.
Met verwijderen bedoel ik dat het niet meer bestaat. Dus dat ik weer opnieuw kan zeggen:
1vector<int> a;
alsof ie nog niet bestaat. Of dat ik de vector weer kan gebruiken alsof hij nooit bestaan heeft.
pi_115309278
Ofwel je gebruikt new en delete (en dus een pointer naar een vector), ofwel je gebruikt accolades om de scope van a aan te geven.
pi_115309322
Maar dan nog zie ik niet wat er mis is met clear.
pi_115309496
quote:
0s.gif 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 :? .
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():

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';

Dat de waardes eigenlijk nog ergens in het geheugen bestaan maakt niet uit: net als op de harde schijf wordt iets dat verwijderd is, niet gelijk helemaal weggegooid maar alleen aangemerkt als 'overschrijfbaar'. Dit doet er verder niet toe: je moet nooit verder lezen dan vector.size() - 1. Dat is jouw verantwoordelijkheid en C++ zal je er niet voor waarschuwen als je het wel doet.

En nee, je kunt niet in dezelfde scope twee maal dezelfde variabele declareren. Je kunt a wel opnieuw toekennen:

1
2
3
vector<int> a;
// code
a = vector<int>(); // nu is a een nieuwe, lege vector
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115310046
Waar ik eigenlijk mee bezig is, is PE 13. Ik moet dus 100 getallen van 50 cijfers bij elkaar optellen. Van het eerste getal zet ik de cijfers opeenvolgend in een vector genaamd vec1. Dan wil ik steeds het volgende getal bij het eerste optellen. Iteratief wil ik vec2 de vector laten zijn die het nieuwe op te tellen getal representeert. Bij dat laatste gaat er dus volgens mij iets mis.

Bij het "optellen" van de eerste twee vectors krijg ik het goede resultaat, maar als ik de derde erbij op wil tellen gaat het fout. Ik krijg geen foutmelding maar de code compileert niet eens.

SPOILER
Om 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.
pi_115310111
quote:
0s.gif 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.
Met a.swap(std::vector<int>()); (a = std::vector<int>();)
Heb je weer een nieuwe vector.
pi_115310224
Wacht, nu zie ik opeens iets. Ik probeer toegang te verkrijgen tot vec2[-1].
pi_115310315
Ik ben al bij opdracht 6...
Had ze al eerder gedaan maar ben loginnaam vergeten. :P

Even kijken hoe moest 6 nog maar.
Sum_n(n)^2 - Sum_n(n^2) = 2*Sum_i>j(ij)
En dat voor de eerste 100.

Oh easy.

edit ho ik vergeet de keer 2 nog...

[ Bericht 7% gewijzigd door t4rt4rus op 08-08-2012 22:12:20 ]
pi_115312242
quote:
11s.gif 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].
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.
pi_115312490
quote:
0s.gif 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.
Ik denk dat het iets te maken heeft met het feit dat bij een optelling het resulterende getal soms langer wordt...
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115312491
quote:
0s.gif 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 :? .
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).
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115312890
quote:
0s.gif 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...
Ja, had daar al voor gecorrigeerd... maar toch gaat er nog iets mis.
pi_115313307
quote:
void add(vector<int>* vec1, vector<int>* vec2)
Hier is overigens waar C++ references voor heeft geintroduceerd; gebruik beter

1void add(vector<int> &vec1, vector<int> &vec2)

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).
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115313401
Voor grote getallen zijn er libraries zoals MPIR.
pi_115313495
quote:
2s.gif 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).
Thanks.
quote:
2s.gif Op woensdag 8 augustus 2012 22:56 schreef thabit het volgende:
Voor grote getallen zijn er libraries zoals MPIR.
Dat is vast niet zo leerzaam als dit geklooi :)
pi_115315551
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. :P

- 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? ;)
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115317316
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?
pi_115322082
quote:
0s.gif 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?
Alles kan, maar zonder ervaring kan het allemaal iets minder vlot.
quote:
0s.gif 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. :P

- 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? ;)
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.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
pi_115322373
quote:
3s.gif 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.
Dat is inderdaad een onderdeel van de FAQ dat ik graag veranderd zou zien. :P

Muggenziftmodus: je opmerking "Het is een andere taal dat C als subset heeft puur omdat C veelgebruikt is" klopt volgens mij op twee punten niet. Ten eerste is C geen subset van C++ en ten tweede is C++ wel degelijk begonnen als uitbreiding van C ("C with classes") en is het dus niet puur omdat C veelgebruikt is dat C++ erop lijkt en het grotendeels ondersteunt. Het klopt wel dat veel legacy C-onderdelen om die reden aangehouden zijn, maar je 'puur' is volgens mij onwaar.

[ Bericht 0% gewijzigd door GS42 op 09-08-2012 02:06:06 ]
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115327317
Kan zijn, ik heb begin nooit meegemaakt (kom van '84), maar de huidige staat is dat (zo goed als) alles wat in C kan, ook in C++ werkt. Tegelijkertijd doe je liever niet alles wat in C kan letterlijk in C++; in deze zin is het m.i. een subset, maar eigenlijk toch een compleet andere taal.
More oneness, less categories
Open hearts, no strategies
Decisions based upon faith and not fear
People who live right now and right here
  donderdag 9 augustus 2012 @ 12:31:18 #243
85514 ralfie
!Yvan eht nioj
pi_115331078
quote:
0s.gif 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?
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.
pi_115333544
Een nieuwe poging vectors bij elkaar op te tellen alsof het getallen zijn. Dus bijvoorbeeld, als
a = {9, 8, 6, 4}
b = {9, 6, 7}

Dan wil ik dat de functie add(a,b) ervoor zorgt dat b = {1, 0, 8, 3, 1}. De functie moet in ieder geval werken voor vectors b die minstens even lang zijn als a. De moeilijkheid zit hem in de verschillende lengtes van de vector. Volgens mij is dit de beste methode om daarmee om te gaan, alleen krijg ik nog wat errors waar ik geen touw aan vast kan knopen.

De functie:
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;
    }
}

En alle errors zien er (ongeveer) als volgt uit:
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>]()'|

Wat heeft dit te betekenen?
pi_115333704
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.

Let ook op dat je bij iterators geen < (of anderen) wilt gebruiken, alleen maar == en !=.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115333922
quote:
0s.gif 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.
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:
Let ook op dat je bij iterators geen < (of anderen) wilt gebruiken, alleen maar == en !=.
Waarom niet? Doen ze hier ook.
pi_115334734
Volgens mij lijkt dit al meer op wat ik wil. Ik heb nu < en > vermeden, maar krijg nu een infinite loop :? .
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;
}
pi_115334770
quote:
0s.gif Op donderdag 9 augustus 2012 13:48 schreef thenxero het volgende:

Waarom niet? Doen ze hier ook.
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.

In dit geval is het misschien een beetje overdreven (want in je voorbeeld gaat het goed, hoor), maar het is sowieso goed in om een for-loop met iterators altijd de volgende vorm aan te houden:

1
2
3
4
itt const end = s.end();
for (itt i = s.begin(); i != end; ++i) {
    // code
}

Dit is altijd juist.

Je code heeft trouwens nog een subtieler probleem: zodra je een container verandert (met insert(), push_back(), clear() etc.) zijn alle bestaande iterators mogelijk ongeldig en kunnen niet meer veilig gebruikt worden. Na jouw insert() kan je l dus niet meer gebruiken voordat je 'em opnieuw toekent.

Dit maken met iterators is vrij lastig. Misschien kan je beter twee for-loops met indexen gebruiken van de volgende vorm:

1
2
3
for (size_t idx = 0; idx < a.size(); ++idx) {
   // code
}

Als je nu een push_back doet, blijft idx geldig en groeit a.size() automatisch mee.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_115334937
Dat ook nog. Wat een drama.... dit bewaar ik voor een regenachtige zondag.
pi_115335140
quote:
10s.gif Op donderdag 9 augustus 2012 14:15 schreef thenxero het volgende:
Dat ook nog. Wat een drama.... dit bewaar ik voor een regenachtige zondag.
Sorry. :) Dat is het grote nadeel van C++: je moet erg veel leren voordat je het een beetje kunt gebruiken.

Er is ook een voordeel: de standard template library bevat veel nuttige code. Bijvoorbeeld valarray. Daarmee kan je gewoon a + b op arrays uitvoeren en dat is volgens mij precies wat jij wilt. Het enige dat je dan nog moet doen, is zorgen dat alle waarden <10 zijn na elke optelling. Een groot deel van goede C++-code schrijven is ook weten wat de STL in de aanbieding heeft.
"Slechts diegene mag slopen die iets beters kan bouwen."
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')