/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
C++: Vector og List iteratorer
Fra : Thormod Johansen


Dato : 26-03-07 16:36

Hej,

Jeg sidder og roder lidt med C++ og container-klasserne Vector og List. Er
det rigtigt forstået, at der er forskel på den iterator, man får, fra
henholdsvis vector og list? Så vidst jeg lige har kunne læse mig til, er
vectors iterator en random access iterator, så man kan sige

Vector<int>::iterator iter = vec.begin();
iter += 10;

For at tilgå det 10'ende element i vectoren vec. Det virker ikke som om man
kan det med lists iterator. Der kan jeg kun sige iter++. Hvad har jeg af
muligheder her?

På forhånd tak.



 
 
Mogens Hansen (26-03-2007)
Kommentar
Fra : Mogens Hansen


Dato : 26-03-07 18:23


"Thormod Johansen" <test@invalid.invalid> wrote in message
news:eu8os9$ib3$1@news.net.uni-c.dk...
> Hej,
>
> Jeg sidder og roder lidt med C++ og container-klasserne Vector og List.

Deres navne staves med små bogstaver: "vector" og "list" eller mere præcist
"std::vector" og "std::list"

> Er det rigtigt forstået, at der er forskel på den iterator, man får, fra
> henholdsvis vector og list?

Ja.

> Så vidst jeg lige har kunne læse mig til, er vectors iterator en random
> access iterator, så man kan sige
>
> Vector<int>::iterator iter = vec.begin();

vector<int>

> iter += 10;

Ja (givet der er mere end 10 elementer i vectoren.

>
> For at tilgå det 10'ende element i vectoren vec. Det virker ikke som om
> man kan det med lists iterator. Der kan jeg kun sige iter++. Hvad har jeg
> af muligheder her?

Iteratoren til "std::list" har egenskaber gældende for bidirectionel
iterator.
Den kan bl.a. både incrementeres (gå fremad) og decrementeres (gå tilbage).
For yderligere information, se f.eks.
http://www.sgi.com/tech/stl/BidirectionalIterator.html
eller søg på Google eller kig i et par gode bøger

Hvis du gerne vil 10 elementer frem i en list, kan man benytte algoritmen
"advance" fra headerfilen "iterator".
Altså:
#include <iterator>
//...
list<int> i = l.begin();
advance(i, 10);

--
Venlig hilsen

Mogens Hansen



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste