数据结构1.2 迭代器的实现

迭代器

实现原理为设计一个内部类封装指针,为这个内部类实现:

  • *重载:用于取元素
  • ++重载:用于遍历“下一个”
  • ==/!=重载:用于判断是否已经结尾

除此之外,作为容器,应该提供:
begin/end方法:他们分别返回指向最开始的迭代器,以及指向结束元素的迭代器。方便遍历。
vector的迭代器实现代码:

#pragma once
#include <stdlib.h>
#include <string.h>

#define ty int

class CMyVector
{
public:
	CMyVector()
	{
		m_pDataAry = new ty[5];
		m_nCount = 0;
		m_nCapacity = 5;
	}
	~CMyVector()
	{

	}

	ty * m_pDataAry;
	int m_nCount; //当前元素个数
	int m_nCapacity; //当前容量大小24

	int size()
	{
		return m_nCount;
	}

	bool empty()
	{
		return (m_nCount == 0) ? true : false;
	}

	void pop_back()
	{
		if (m_nCount == 0)
		{
			return;
		}

		m_nCount--;
		return;
	}

	ty& operator[](int index)
	{
		return m_pDataAry[index];
	}

	ty front()
	{
		return m_pDataAry[0];
	}

	ty back()
	{
		return m_pDataAry[m_nCount - 1];
	}

	void push_back(ty item)
	{
		if (m_nCount + 1 > m_nCapacity)
		{
			ty* pOld = m_pDataAry;

			m_pDataAry = new ty[m_nCapacity * 2];
			//check...
			memcpy(m_pDataAry, pOld, m_nCapacity*sizeof(ty));
			if (pOld)
			{
				delete[] pOld;
				pOld = nullptr;
			}
			m_nCapacity *= 2;
		}

		m_pDataAry[m_nCount] = item; //注意拷贝构造
		m_nCount++;
	}

	struct iterator
	{
		ty* m_pData;
		iterator(ty* pObj) :m_pData(pObj)
		{

		}

		bool operator==(iterator& otherObj)
		{
			return m_pData == otherObj.m_pData;
		}



		bool operator != (iterator &otherObj)
		{
			return m_pData != otherObj.m_pData;
		}


		ty& operator*()
		{
			return *m_pData;
		}


		iterator operator++(int)
		{
			m_pData++; return m_pData;
			//类型是ty*,与iterator不符
			//但是iterator有构造:iterator(ty* pObj)
			//编译器会尝试把当前不符合的遍历,作为构造的参数
			//去自动构造
		}
	};


	iterator begin()
	{
		return &m_pDataAry[0];
	}


	iterator end()
	{
		return &m_pDataAry[m_nCount];
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值