vector与list使用与剖析1
#pragmaonce#include<iostream>usingnamespacestd;#include<vector>#include<list>voidTestVector(){vector<int>v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(6);v.push_back(5);for(inti=0;i<v.size();++i){cout<<v[i]<<"";}cout<<endl;vector<int>::iteratoriter=v.begin();for(;iter!=v.end();++iter){cout<<*iter<<"";}cout<<endl;}voidTestList(){list<int>l;//双向循环链表l.push_back(1);l.push_back(2);l.push_back(3);l.push_back(4);l.push_back(6);l.push_back(5);list<int>::iteratoriter=l.begin();for(;iter!=l.end();++iter){cout<<*iter<<"";}cout<<endl;}
仿库中迭代器的实现:
#pragmaonce#include<iostream>#include<vector>#include<list>#include<assert.h>usingnamespacestd;template<classT>struct__ListNode{T_data;__ListNode<T>*_prev;__ListNode<T>*_next;__ListNode(constT&x=T()):_prev(NULL),_next(NULL),_data(x){}};template<classT,classRef,classPtr>struct__ListIterator{typedef__ListIterator<T,Ref,Ptr>Self;typedefTValueType;typedefRefReference;typedefPtrPointer;__ListNode<T>*_node;__ListIterator(){}__ListIterator(__ListNode<T>*node):_node(node){}Referenceoperator*(){return_node->_data;}booloperator==(constSelf&s){return_node==s._node;}booloperator!=(constSelf&s){return_node!=s._node;}Self&operator++(){_node=_node->_next;return*this;}Selfoperator++(int){Selftmp(*this);_node=_noode->_next;returntmp;}Self&operator--(){_node=_noode->_prev;return*this;}Selfoperator--(int){Selftmp(*this);_node=_node->_prev;returntmp;}};template<classT>classList{typedef__ListNode<T>Node;Node*_head;public:typedef__ListIterator<T,T&,T*>Iterator;typedef__ListIterator<T,constT&,constT*>ConstIterator;List():_head(newNode){_head->_next=_head;_head->_prev=_head;}/*voidPushBack(constT&x){Node*tail=_head->_prev;Node*tmp=newNode(x);tmp->_next=_head;_head->_prev=tmp;tail->_next=tmp;tmp->_prev=tail;}*/voidPushBack(constT&x){Insert(End(),x);}voidPushFront(constT&x){Insert(Begin(),x);}voidPopBack(){Erase(End());}voidPopFront(){Erase(Begin());}voidInsert(Iteratorpos,constT&x){Node*cur=pos._node;Node*prev=cur->_prev;Node*tmp=newNode(x);tmp->_next=cur;cur->_prev=tmp;prev->_next=tmp;tmp->_prev=prev;}IteratorErase(Iteratorpos){assert(pos!=End());Node*prev=pos._node->_prev;Node*next=pos._node->_next;Node*del=pos._node;prev->_next=next;next->_prev=prev;deletedel;returnIterator(next);}IteratorBegin(){returnIterator(_head->_next);}IteratorEnd(){return_head;//explicit//returnIterator(_head);}};voidTestSList(){List<int>l;l.PushBack(1);l.PushBack(2);l.PushBack(3);l.PushBack(4);l.PushBack(5);List<int>::Iteratoriter=l.Begin();while(iter!=l.End()){cout<<*iter<<"";++iter;}cout<<endl;iter=l.Begin();while(iter!=l.End()){List<int>::Iteratortmp=iter;++tmp;if(*iter%2==0){l.Erase(iter);}iter=tmp;/*if(*iter%2==0){iter=l.Erase(iter);}else++iter;*/}iter=l.Begin();while(iter!=l.End()){cout<<*iter<<"";++iter;}cout<<endl;}voidTestVector(){vector<int>v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(6);v.push_back(5);for(inti=0;i<v.size();++i){cout<<v[i]<<"";}cout<<endl;vector<int>::iteratoriter=v.begin();for(;iter!=v.end();++iter){cout<<*iter<<"";}cout<<endl;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。