堆栈里的迭代器

来源:互联网 发布:oracle数据库迁移步骤 编辑:程序博客网 时间:2024/05/17 23:33
#include <iostream>using namespace std;class IntStack{private:enum {ssize = 100};int stack[ssize];int top;public:IntStack() : top(0){}//~IntStack(){}void push(int i){if (top <ssize)// 这个是判断条件,stack[top++] = i;}int pop()     // 每pop一次堆栈里边就少一个数据,{if (top > 0) // 这个是判断条件,return stack[--top];}class iterator;friend class iterator;class iterator    // 这个是做堆栈的迭代器,迭代器不会改变堆栈里边的数据,只能讲数据读取出来看,{private:IntStack& s;int index;    // 索引,public:iterator(IntStack& is) : s(is), index(0) {}iterator(IntStack& is, bool) :s(is), index(s.top){}int current() const { return s.stack[index]; }int operator++()      // 操作符重载前加加,{if (index < s.top)return s.stack[++index];}int operator++(int){if (index < s.top)return s.stack[index++];}iterator& operator+=(int amount){index += amount;return *this;}bool operator==(const iterator& rv) const{return index == rv.index;}bool operator!=(const iterator& rc) const{return index != rc.index;}friend ostream& operator<<(ostream& os, const iterator& it) // 输出流操作符重载,{return os << it.current();}};iterator begin()    // begin 指向堆栈的第一个数据,{return iterator(*this);}iterator end()    // end指向堆栈的最后一个数据的下一个,{return iterator(*this, true);}};int main(){IntStack a;a.push(8);a.push(9);a.push(10);a.push(11);//IntStack::iterator it(a);IntStack::iterator it(a.begin());while (it != a.end()){cout << it++ << endl;}cout << endl;IntStack::iterator start = a.begin();start += 2;cout << start.current() << endl;/*for (int i = 0; i < 4; i++)cout << it++ << endl;  */   // 前加加输出9 10 11 还有一个随机数,后加加输出8 9 10 11return 0;}

0 0
原创粉丝点击