- // Iterator.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- template <class T>
- class Iterator
- {
- public:
- Iterator()
- {
- this->m_pData = NULL;
- this->m_nPos = 0;
- this->m_nSize = 0;
- this->m_nLen = 0;
- }
- ~Iterator()
- {
- if (NULL != this->m_pData)
- {
- delete[] this->m_pData;
- this->m_pData = NULL;
- }
- }
- public:
- virtual T* end() = 0;
- virtual T* begin() = 0;
- protected:
- int m_nPos;
- int m_nSize;
- int m_nLen;
- T* m_pData;
- };
- template <class T>
- class CMyVector:public Iterator<T>
- {
- public:
- typedef T* iterator;
- public:
- CMyVector(int nSize = 10)
- {
- if (nSize < 0)
- {
- nSize = 10;
- }
- this->m_pData = new T[this->m_nSize];
- }
- ~CMyVector()
- {
- }
- public:
- int Length()
- {
- return this->m_nLen;
- }
- bool Push(T obj)
- {
- if (this->m_nLen >= this->m_nSize)
- {
- //get more memory
- int nSize = this->m_nSize * 2 + 1;
- T* pTemp = new T[nSize];
- if (NULL == pTemp)
- {
- return false;
- }
- this->m_nSize = nSize;
- ::memset(pTemp, 0, sizeof(T) * this->m_nSize);
- ::memcpy(pTemp, this->m_pData, sizeof(T)*this->m_nLen);
- delete[] this->m_pData;
- this->m_pData = pTemp;
- }
- ::memcpy(this->m_pData + this->m_nLen, &obj, sizeof(obj));
- this->m_nLen ++;
- return true;
- }
- public:
- virtual T* end()
- {
- return this->m_pData + this->m_nLen;
- }
- virtual T* begin()
- {
- this->m_nPos = 0;
- return this->m_pData;
- }
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- int i = 0;
- CMyVector<int> vtData;
- CMyVector<int>::iterator it;
- for (i = 0; i < 10; i++)
- {
- vtData.Push(i);
- cout << "nLen = " << vtData.Length() << endl;
- }
- cout << "vector data: " << endl;
- for (it = vtData.begin(); it != vtData.end(); it++)
- {
- cout << *it << "/t";
- }
- cout << endl;
- return 0;
- }
模仿stl实现自己的vector
最新推荐文章于 2024-07-29 20:29:31 发布