Professional Documents
Culture Documents
Input Iterator
Output Iterator
Forward Iterator
Bidirectional Iterator
119
Abilities of Iterators
Iterator Category
Ability
Provider
Input iterator
Read forward
istream
Output iterator
Write forward
ostream, inserter
Forward iterator
Bidirectional iterator
Random access
iterator
120
Input Iterator
Expression
*iter
Effect
Provides read access to the actual element
iter++
TYPE(iter)
121
Output Iterator
Expression
Effect
*iter = value
++iter
iter++
TYPE(iter)
122
Forward Iterator
Expression
*iter
Effect
Provides read access to the actual element
iter++
TYPE()
TYPE(iter)
iter1 = iter2
Assigns an iterator
123
Bidirectional Iterator
Expression
*iter
Effect
Provides read access to the actual element
iter++
--iter
iter--
TYPE()
TYPE(iter)
iter1 = iter2
Assigns an iterator
124
Effect
iter[n]
iter+= n
iter-= n
n+iter
iter-n
iter1 - iter2
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 );
};
126
Class HuffmanBitCode
class 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 constructor
int at( unsigned int aIndex ) const;
int operator[]( unsigned int aIndex ) const;
iterator begin();
iterator end();
};
127
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 );
};
128
Class HuffmanBitCode::iterator
// HuffmanBitCode::iterator
class iterator
{
public:
// Iterator behavior
int operator*() const;
iterator& operator++(); // prefix
iterator operator++(int);// postix (extra unused argument)
bool operator==( const iterator& ) const;
bool operator!=( const iterator& ) const;
// non-standard iterator method to obtain a cloned end
iterator end();
iterator next();
};
129
HuffmanBitCode::iterator::operator++()
HuffmanBitCode::iterator&
HuffmanBitCode::iterator::operator++()
{
fIndex++;
return *this;
}
130
HuffmanBitCode::iterator::operator++(int)
HuffmanBitCode::iterator
HuffmanBitCode::iterator::operator++(int)
{
iterator lTemp = *this;
fIndex++;
return lTemp;
}
131
HuffmanBitCode::iterator::operator==()
bool HuffmanBitCode::iterator::operator==
( const iterator& aOther ) const
{
return (fCode == aOther.fCode) &&
(fIndex == aOther.fIndex);
}
132
HuffmanBitCode::iterator::operator!=()
bool HuffmanBitCode::iterator::operator!=
( const iterator& aOther ) const
{
return !(*this == aOther);
}
133
HuffmanBitCode::iterator::end()
HuffmanBitCode::iterator
HuffmanBitCode::iterator::end()
{
return
iterator( fCode, fCod->fCodeLength );
}
134
HuffmanBitCode::iterator::next()
HuffmanBitCode::iterator
HuffmanBitCode::iterator::next()
{
return iterator( fCode, fIndex + 1 );
}
135
HuffmanBitCode::begin()
HuffmanBitCode::iterator HuffmanBitCode::begin()
{
return iterator( this );
}
136
HuffmanBitCode::end()
HuffmanBitCode::iterator HuffmanBitCode::end()
{
return iterator( this, fCodeLength );
}
137