實現C++堆棧模板

來源:互聯網
上載者:User

標籤:c++ stl 演算法

迭代器使用起來非常方便,其實背後做了大量的工作。它是容器類的一個內嵌類,管理著一個指向容器類元素的指標。

#include<iostream>#include<string>#include<assert.h>using std::cout;using std::endl;using std::string;struct TestType{    string word;    TestType(string str = "") : word(str){}};template<class T>class Stack {    struct Link {        T data;        Link* next;        Link(T dat, Link* nxt)            : data(dat), next(nxt) {}    }* head;public:    Stack() : head(0) {        cout << "Stack default contructor\n";     }    ~Stack();    void push(const T& dat) {        cout << "Stack::" << __FUNCTION__ << "\n";        head = new Link(dat, head);    }    T& peek() const {        cout << "Stack::" << __FUNCTION__ << "\n";        assert(head);        return head->data;    }    T pop();    // Nested iterator class:    class iterator; // Declaration required    friend class iterator; // Make it a friend    class iterator { // Now define it        Stack::Link* p;    public:        iterator(const Stack<T>& tstack) : p(tstack.head) {            cout << "iterator::" << __FUNCTION__ << "(const Stack<T>& tstack)\n";        }        // Copy-constructor:        iterator(const iterator& it) : p(it.p) {            cout << "iterator::" << __FUNCTION__ << "(const iterator& it)\n";        }        // The end sentinel iterator:        iterator() : p(0) {            cout << "iterator::" << __FUNCTION__ << "()\n";        }        // operator++ returns boolean indicating end:        iterator& operator++() {            cout << "iterator::" << __FUNCTION__ << "()\n";            if(p)                p = p->next;            return *this;        }        iterator& operator++(int) {            cout << "iterator::" << __FUNCTION__ << "(int)\n";            return operator++();        }        // Pointer dereference operator:        T* operator->() const {            cout << "iterator::" << __FUNCTION__ << "\n";            assert(p);            return &(p->data);        }        T& operator*() const {            cout << "iterator::" << __FUNCTION__ << "\n";            assert(p);            return p->data;        }        // bool conversion for conditional test:        operator bool() const {            cout << "iterator::" << __FUNCTION__ << "\n";            return bool(p);        }        // Comparison to test for end:        bool operator==(const iterator&it) const {            cout << "iterator::" << __FUNCTION__ << "\n";            return p == it.p;        }        bool operator!=(const iterator&it) const {            cout << "iterator::" << __FUNCTION__ << "\n";            return p != it.p;        }    };    iterator begin() const {        cout << "Stack::" << __FUNCTION__ << "\n";        return iterator(*this);    }    iterator end() const {        cout << "Stack::" << __FUNCTION__ << "\n";        return iterator();    }};template<class T>Stack<T>::~Stack() {    cout << "Stack::" << __FUNCTION__ << "\n";    while(head)        pop();}template<class T>T Stack<T>::pop() {    cout << "Stack::" << __FUNCTION__ << "\n";    if(head == 0) return T();    T result = head->data;    Link* oldHead = head;    head = head->next;    delete oldHead;    return result;}int main() {    Stack<TestType> textlines;    textlines.push(TestType(string("I")));    textlines.push(TestType(string("love")));    textlines.push(TestType(string("you")));    // Use iterator to print lines from the list:    for(auto it = textlines.begin(); it != textlines.end(); it++){    //for(auto it = textlines.begin(); it; it++){        cout << it->word << endl;        cout << (*it).word << endl;    }    return 0;}


本文出自 “12613979” 部落格,謝絕轉載!

實現C++堆棧模板

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.