容器的内嵌类——迭代器

容器是c++stl库里实现的重要结构,这里简单实现链表的构造以及遍历操作。

stl库里实现了容器的迭代器,用于遍历容器中的部分或全部元素。

在这里我们来模拟实现迭代器的简单遍历,以及容器迭代器接口的实现。


//节点
template
   
   
    
    
struct ListNode
{
	ListNode(const T& data)
	:_next(NULL), _prev(NULL), _data(data)
	{
	}
	T _data;
	ListNode
    
    
     
     * _next;
	ListNode
     
     
      
      * _prev;
	
};
//带头结点的循环双向链表
template
      
      
       
       
class List
{
	typedef ListNode
       
       
         Node; public: typedef _Iterator 
        
          Iterator; typedef _Iterator 
         
           ConstIterator; Node* GetNode(const T& x) { return new Node(x); } List()//构造函数 :_head(GetNode(T()) ) { _head->_next = _head; _head->_prev = _head; } ~List()//析构函数 { Clean(); delete _head; } Iterator Begin()//迭代器接口,返回一个用第一个元素的指针构造的迭代器 { return Iterator(_head->_next); } ConstIterator Begin()const { return ConstIterator(_head->_next); } Iterator End() { return Iterator(_head); } ConstIterator End()const { return ConstIterator(_head); } void Clean() { Node* Pnode = _head->_next; while (Pnode != _head) { Node* del = Pnode; Pnode = Pnode->_next; delete del; } } void pushback(const T& x)//尾插元素 { Node* tail = _head->_prev; Node* temp = GetNode(x); tail->_next = temp; temp->_prev = tail; temp->_next = _head; _head->_prev = temp; } protected: Node* _head; }; 
          
         
       
      
      
     
     
    
    
   
   

#include 
   
   
    
    
using namespace std;

//节点
template
    
    
     
     
struct ListNode
{
	ListNode(const T& data)
	:_next(NULL), _prev(NULL), _data(data)
	{
	}
	T _data;
	ListNode
     
     
      
      * _next;
	ListNode
      
      
       
       * _prev;
	
};

//迭代器
template
       
       
         struct _Iterator { typedef ListNode 
        
          Node; typedef _Iterator 
         
           Self; _Iterator(Node* node) :_node(node) {} Ref operator*() //*操作符重载 { return _node->_data; } Self& operator++()//++操作符重载 { _node = _node->_next; return *this; } bool operator!=(const Self& it) const//!=操作符重载 { return it._node != _node; } Node* _node; } 
          
         
       
      
      
     
     
    
    
   
   

迭代器是容器的内嵌类,通过实现迭代器的++,*,!= 操作符,以及在容器类通过Begin和End函数实现遍历容器的作用。

一下是测试代码

PrintMyList用以实现的迭代器打印链表

void PrintMyList(const List
   
   
    
    & l1)//遍历并打印链表
{
	List
    
    
     
     ::ConstIterator it = l1.Begin();
	{
		while (it != l1.End())
		{
			cout << *it << " ";
			++it;
		}
		cout << endl;
	}
}



int main()
{
	List
     
     
      
       l1;
	l1.pushback(1);
	l1.pushback(2); 
	l1.pushback(3);
	PrintMyList(l1);
	system("pause");
	return 0;
}
     
     
    
    
   
   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值