/ 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
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
latterligt spørgsmål.....
Fra : Niels


Dato : 29-09-01 21:12

måske ..... men nu har vi jo gang i alle lamer spørgsmålene! Og hvis jeg
nu får en god forklaring her, er jeg jo fri for at skulle til at finde
informationer selv

Iterator ??? hvad er det helt præcist ... ved at der findes noget der
hedder en iterator klasse under STL, og det skulle være noget med at man
skulle kunne sammenligne det med en intelligent pointer, til at håndtere
data i templates ! Er dette korrekt ? mangler jeg noget ?

NG er vel til for at minimere ens arbejde, og komme dovenskaben i hu?
eller er det oxo forkert opfattet ? hav en fortsat god dag

på forhånd tak !

m.v.h Niels


 
 
Anders Bo Rasmussen (30-09-2001)
Kommentar
Fra : Anders Bo Rasmussen


Dato : 30-09-01 01:00

On Sat, 29 Sep 2001 22:11:52 +0200,
Niels <wuss@hillbilly.dk> wrote:

> måske ..... men nu har vi jo gang i alle lamer spørgsmålene! Og hvis jeg
> nu får en god forklaring her, er jeg jo fri for at skulle til at finde
> informationer selv
>
> Iterator ??? hvad er det helt præcist ... ved at der findes noget der
> hedder en iterator klasse under STL, og det skulle være noget med at man
> skulle kunne sammenligne det med en intelligent pointer, til at håndtere
> data i templates ! Er dette korrekt ? mangler jeg noget ?
>
> NG er vel til for at minimere ens arbejde, og komme dovenskaben i hu?
> eller er det oxo forkert opfattet ? hav en fortsat god dag

Sammenligningen med pointer er nok ikke helt dårligt. Men hvad du mener
med at håndtere data i templates er lidt uklart.

En iterator bruges til at gennemløbe data i en container.

--
Like a rat in a maze Anders Bo Rasmussen mailto:fuzz01@spamfilter.dk
The path before me lies Frimestervej 42 1.tv http://www.fuzz.dk
And the pattern never alters 2400 Kbh. NV
Until the rat dies.

Igor V. Rafienko (30-09-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 30-09-01 19:09

[ wuss@hillbilly.dk ]

> måske ..... men nu har vi jo gang i alle lamer spørgsmålene! Og hvis
> jeg nu får en god forklaring her, er jeg jo fri for at skulle til at
> finde informationer selv


Det fungerer sjelden på denne måten. Til syvende og sist blir man nødt
til å finne informasjonen selv. Den vanskelige delen er ikke å finne
den, men å vite hvor man skal lete.


> Iterator ??? hvad er det helt præcist ... ved at der findes noget
> der hedder en iterator klasse under STL, og det skulle være noget
> med at man skulle kunne sammenligne det med en intelligent pointer,
> til at håndtere data i templates ! Er dette korrekt ? mangler jeg
> noget ?


Nei, det er nok ikke helt korrekt.

Iterator er et begrep (eng: concept). Det finnes 5 begreper i
iterator-familien: input, output, forward, bidirectional og random
access.

Dette begrepet er representert (modellert) på mange forskjellige måter
i C++. En modell er vanlige pekere (en int* er faktisk en iterator).
En annen modell er std::vector<>::iterator. Hver container klasse i
STL har sine egne iterator klasser. Disse iterator klasser modellerer
i sin tur et av de overnevnte begreper i iterator familien (fx.
std::vector<>::iterator er en random access iterator, mens
std::list<>::iterator er en bidirectional iterator). Det finnes også
en rekke "frittstående" iteratorer, som ikke er knyttet til containere
i STL på noen måte. std::istreambuf_iterator er et eksempel på slike:

using namespace std;

ifstream ifs( "datafile" );
string s( (istreambuf_iterator< char >( ifs )),
    (istreambuf_iterator< char >()) );
// now s constains the entire datafile

set< char > ss;
copy( s.begin(), s.end(), inserter( ss ) );
// now ss contains all the different chars from datafile

// and now we output all the chars, with A's replaced by Z's
replace_copy_if( ss.begin(), ss.end(),
    ostream_iterator< char >( cout, "\n" ),
       'A', 'Z' );

// and now dump all the chars, with A's replaces by B's
// to a vector
vector< char > v;
replace_copy_if( ss.begin(), ss.end(),
       back_inserter( v ),
       'A', 'B' );


Hele vitsen er å virke som et mellomlag mellom algoritmer og
datastrukturer. binary_search burde ikke bry seg om _hvilken_
container som gjennomløpes, så lenge den tilfredstiller visse krav.
Iteratorer virker som en pekepinne til en "sekvens" av elementer (vel
å merke: "en sekvens" er noe temmelig abstrakt -- en input fil er også
en "sekvens" av poster).

Intelligente pekere (smart pointers) er oftest pekere som håndterer
hukommelsen automatisk og frigjør programmereren fra denne utrolig
brysomme byrden. std::auto_ptr<> er et eksempel på en slik smart
pointer. Det har lite (om noe) med iteratorer å gjøre.

Uttrykket "håndtere data i templates" gir overhodet ikke mening, så du
blir nødt til å presisere det, om du vil ha et svar på det.


> NG er vel til for at minimere ens arbejde, og komme dovenskaben i
> hu? eller er det oxo forkert opfattet ? hav en fortsat god dag
>


Istedenfor at noen skal prøve å reprodusere det Matt Austern har
allerede skrevet, anbefaler jeg å ta en titt på:

"Generic Programming and the STL"
ISBN: 0-201-30956-4

Der står svar på alle spm. du måtte ha i forbindelse med iteratorne.





ivr
--
"Kashu maslom ne isportish'" - skazal traktorist,
slivaya otrabotku na grechishnoe pole.

Niels (01-10-2001)
Kommentar
Fra : Niels


Dato : 01-10-01 15:00

takker meget for svarene

m.v.h Niels


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste