[ 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.