【发布时间】:2014-01-24 20:20:28
【问题描述】:
我的嵌套迭代器类有问题。 end() 哨兵返回 0,我很迷茫!任何帮助,将不胜感激。我希望这个程序能够接受任何类型的输入,例如一个 int,创建向量,并能够填充数组,直到到达 end() 标记,例如键入 Q,或任何非整数。我去掉了几行不必要的代码来缩短它。
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
【问题讨论】:
-
这是一种练习吗,或者您可以直接使用
std::set或std::unordered_set代替吗? -
end() 表示 1 过去的结束而不是实际结束。已经有很多讨论了,请参考stackoverflow.com/questions/9963401/…
-
@H2CO3 这是一个任务
标签: c++ class templates vector iterator