I am having issues with my nested iterator class. The end() sentinel is returning 0, and I am very lost! Any help would be appreciated. I want this program to be able to take any type of input, e.g. an int, create the vector, and be able to fill the array until the end() sentinel has been reached, such as typing Q, or any non-integer. I took out a few lines of unnecessary code to shorten it.
template <class T>
class Set
{
private:
vector<T> m_element;
int size;
public:
Set() : size(0) {};
................
................
................
class iterator;
friend class iterator;
class iterator
{
private:
int i_index;
Set& s;
public:
iterator(Set& is) :s(is), i_index(0) {}
iterator(Set& is, bool) : s(is), i_index(s.size) {}
int operator++()
{
return s.m_element[++i_index];
}
(other postfix ++ operator)
int current() const
{
return s.m_element[i_index];
}
....................
bool operator!=(const iterator &rv) const
{
return i_index != rv.i_index;
}
.............................
int getI()
{
return i_index;
}
};
iterator begin() { return iterator(*this);}
iterator end() {return iterator(*this, true);}
};
template <class T>
istream& operator>> (istream &in, Set<T> &element)
{
T elementin;
Set<T> is;
class Set<T>::iterator it = element.begin();
while(it != element.end())
{
in >> elementin;
element.push(elementin);
}
return in;
}
int main()
{
Set<int> intset;
Set<int>::iterator it = intset.begin();
for(int i = 0; i < 5; i++)
{
intset.push(i);
cout << it.getI();
++it;
}
cout << endl << intset.begin() << intset.end();
return 0;
}
OUTPUT:
01234
00