Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators...

19
119 Iterators Input Iterator Output Iterator Forward Iterator Random Access Iterator Bidirectional Iterator

Transcript of Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators...

Page 1: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

119

Iterators

Input Iterator Output Iterator

Forward Iterator

Random Access Iterator

Bidirectional Iterator

Page 2: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

120

Abilities of Iterators

Read and write withrandom access

Random accessiterator

list, set, multiset,map, multimap,vector, deque, string,array

Read and writeforward and backwardBidirectional iterator

Read and writeforwardForward iterator

ostream, inserterWrite forwardOutput iterator

istreamRead forwardInput iterator

ProviderAbilityIterator Category

Page 3: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

121

Input Iterator

Copies iterator (copy contructor)TYPE(iter)

Returns whether iter1 and iter2 are not equaliter1 != iter2

Returns whether iter1 and iter2 are equaliter1 == iter2

Steps forward (returns old position)iter++

Steps forward (returns new position)++iter

Provides read access to a member of the actual elementiter->member

Provides read access to the actual element*iterEffectExpression

Page 4: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

122

Output Iterator

Copies iterator (copy contructor)TYPE(iter)

Steps forward (returns old position)iter++

Steps forward (returns new position)++iterWrites value to the actual element*iter = value

EffectExpression

An output iterator is like a “black hole”.

Page 5: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

123

Forward Iterator

Assigns an iteratoriter1 = iter2

Creates iterator (default constructor)TYPE()

Copies iterator (copy contructor)TYPE(iter)

Returns whether iter1 and iter2 are not equaliter1 != iter2

Returns whether iter1 and iter2 are equaliter1 == iter2

Steps forward (returns old position)iter++

Steps forward (returns new position)++iter

Provides read access to a member of the actual elementiter->member

Provides read access to the actual element*iterEffectExpression

Page 6: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

124

Bidirectional Iterator

Steps backward (returns old position)iter--

Steps backward (returns new position)--iter

Assigns an iteratoriter1 = iter2

Creates iterator (default constructor)TYPE()

Copies iterator (copy contructor)TYPE(iter)

Returns whether iter1 and iter2 are not equaliter1 != iter2

Returns whether iter1 and iter2 are equaliter1 == iter2

Steps forward (returns old position)iter++

Steps forward (returns new position)++iter

Provides read access to a member of the actual elementiter->member

Provides read access to the actual element*iterEffectExpression

Page 7: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

125

Random Access Iterator

Returns whether iter1 is not before iter2iter1 >= iter2Returns whether iter1 is not after iter2iter1 <= iter2Returns whether iter1 is after iter2iter1 > iter2Returns whether iter1 is before iter2iter1 < iter2

Returns distance between iter1 and iter2 are not equaliter1 - iter2

Returns the iterator of the nth previous elementiter-n

Returns the iterator of the nth next elementn+iter

Steps n elements backward or forwarditer-= n

Steps n elements forward or backwarditer+= n

Provides read access to element at index niter[n]

EffectExpression

Page 8: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

126

Class HuffmanBitCode

class HuffmanBitCode{private:

byte* fBitArray;unsigned int fCodeLength;

void copy( const HuffmanBitCode& aCode );void extend( int aToCodeLength );void copy( byte aBitArray[], int aCodeLength );

…};

Page 9: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

127

Class HuffmanBitCodeclass HuffmanBitCode{

public:HuffmanBitCode();HuffmanBitCode( byte aBitArray[], int aCodeLength );HuffmanBitCode( const HuffmanBitCode& aBitCode );~HuffmanBitCode();

class iterarator { … };

unsigned int size() const;byte* getBits() const;int lengthInByte() const;void add0();void add1();HuffmanBitCode& operator=( const HuffmanBitCode& aBitCode ); // required bc copy constructorint at( unsigned int aIndex ) const;int operator[]( unsigned int aIndex ) const;iterator begin();iterator end();

};

Page 10: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

128

Class HuffmanBitCode::iterator

// HuffmanBitCode::iterator

class iterator{

friend class HuffmanBitCode;

private:HuffmanBitCode* fCode;unsigned int fIndex;

// follow singleton pattern (constructor should not be public)protected:

iterator();iterator( HuffmanBitCode* aCode );iterator( HuffmanBitCode* aCode, unsigned int aPosition );…

};

Page 11: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

129

Class HuffmanBitCode::iterator

// HuffmanBitCode::iterator

class iterator{

…public:

// Iterator behaviorint operator*() const;iterator& operator++(); // prefixiterator operator++(int);// postix (extra unused argument)bool operator==( const iterator& ) const;bool operator!=( const iterator& ) const;

// non-standard iterator method to obtain a cloned enditerator end();iterator next();

};

Page 12: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

130

HuffmanBitCode::iterator::operator++()

HuffmanBitCode::iterator&HuffmanBitCode::iterator::operator++()

{fIndex++;return *this;

}

Page 13: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

131

HuffmanBitCode::iterator::operator++(int)

HuffmanBitCode::iteratorHuffmanBitCode::iterator::operator++(int)

{iterator lTemp = *this;fIndex++;return lTemp;

}

Page 14: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

132

HuffmanBitCode::iterator::operator==()

bool HuffmanBitCode::iterator::operator==( const iterator& aOther ) const

{return (fCode == aOther.fCode) &&

(fIndex == aOther.fIndex);}

Page 15: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

133

HuffmanBitCode::iterator::operator!=()

bool HuffmanBitCode::iterator::operator!=( const iterator& aOther ) const

{return !(*this == aOther);

}

Page 16: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

134

HuffmanBitCode::iterator::end()

HuffmanBitCode::iteratorHuffmanBitCode::iterator::end()

{return

iterator( fCode, fCod->fCodeLength );}

Page 17: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

135

HuffmanBitCode::iterator::next()

HuffmanBitCode::iteratorHuffmanBitCode::iterator::next()

{return iterator( fCode, fIndex + 1 );

}

Page 18: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

136

HuffmanBitCode::begin()

HuffmanBitCode::iterator HuffmanBitCode::begin(){

return iterator( this );}

Page 19: Iterators - Iowa State Universityweb.cs.iastate.edu/~lumpe/CS229/Iterators.pdfAbilities of Iterators Read and write with random access Random access iterator list, set, multiset, map,

137

HuffmanBitCode::end()

HuffmanBitCode::iterator HuffmanBitCode::end(){

return iterator( this, fCodeLength );}