模板迭代器

来源:互联网 发布:js一直执行某方法 编辑:程序博客网 时间:2024/06/11 20:33
#include <iostream>#include <string>#include <fstream>using namespace std;template<class T,int ssize = 100>class Stack{private:T stack[ssize];int top;public:Stack() : top(0){}void push(const T& i){if (top <ssize)// 这个是判断条件,stack[top++] = i;}T pop()     // 每pop一次堆栈里边就少一个数据,{if (top > 0) // 这个是判断条件,return stack[--top];}class iterator;friend class iterator;class iterator    // 这个是做堆栈的迭代器,迭代器不会改变堆栈里边的数据,只能讲数据读取出来看,{private:Stack& s;int index;    // 索引,public:iterator(Stack& is) : s(is), index(0) {}iterator(Stack& is, bool) :s(is), index(s.top){}T operator*() const { return s.stack[index]; }T operator++()      // 操作符重载前加加,{if (index < s.top)return s.stack[++index];}T 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(){Stack<int> a;a.push(8);a.push(9);a.push(10);a.push(11);//IntStack::iterator it(a);Stack<int>::iterator it(a.begin());while (it != a.end()){cout << it++ << endl;}cout << endl;Stack<int>::iterator start = a.begin();start += 2;cout << *start<< endl;Stack<string> strings;  ifstream in("naintest.cpp");  // 这个在函数头  #include <fstream>  里边,string line;while (getline(in, line))strings.push(line);Stack<string>::iterator rb = strings.begin(), rs = strings.end();while (rb != rs)cout << rb++ << endl;/*for (int i = 0; i < 4; i++)cout << it++ << endl;  */   // 前加加输出9 10 11 还有一个随机数,后加加输出8 9 10 11return 0;}

0 0