关闭

C++ STL 迭代器的简单模拟

355人阅读 评论(0) 收藏 举报

下面的代码只是在简单的模拟STL的迭代器的实现机制,当然具体的vector实现远比下面的复杂。

同时为了尽量的简单,我对很多细节的问题没有处理,通过这段代码只是想告诉大家:STL 迭代器的实现技巧。

 

#include<iostream> 
using namespace std; 
  
/* 
 *开 发 者:卡农 
 *开发时间:2010-10-1 
 *描    述:vector迭代器的简单模拟 
 */
template<class T> 
class _vector{ 
public: 
  
    typedef T* iterator;//迭代器就是在这里实现的 
  
    /* 
     *构造一个vector 
     *参数:n      vector里面元素的数量 
     */
    _vector(int n){ 
        this->data=new T[n]; 
        this->beginP=this->data; 
        this->endP=this->data; 
    } 
  
    /* 
     *添加一个元素到vector的末尾 
     *参宿:val        添加的元素的值   
     */
    void push_back(T val){ 
        *this->endP=val; 
        this->endP++; 
    } 
  
    /* 
     *得到一个迭代器 
     *返回:指向最后一个元素的迭代器 
     */
    iterator begin(){ 
        return this->beginP; 
    } 
  
    /* 
     *得到一个迭代器 
     *返回:指向第一个元素的迭代器 
     */
    iterator end(){ 
        return this->endP; 
    } 
  
    //虚构函数 
    ~_vector(){ 
        delete(this->data); 
    } 
private: 
    //我为了尽量的简单我屏蔽了默认构造函数,拷贝构造函数 , 赋值函数 
    _vector(){} 
    _vector(const _vector<T> & other){} 
    _vector & operator=(const _vector<T> &){} 
  
private: 
    iterator beginP;  //第一个元素 
    iterator endP;    //尾部,也就是最后一个元素的下一个元素 
    T * data; 
}; 
  
//测试 
int main(){ 
    _vector<int> * obj=new _vector<int>(10); 
  
    for(int i=0; i<5; i++){ 
        obj->push_back(i+1); 
    } 
    //是不是STL的迭代器一模一样呀 
    _vector<int>::iterator iter=obj->begin(); 
    while(iter!=obj->end()){ 
        cout<<*iter++<<endl; 
    } 
  
    delete(obj); 
    return 0; 
}


转自:http://www.cnblogs.com/kanong/archive/2010/10/01/1840640.html 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:113893次
    • 积分:1572
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:91篇
    • 译文:0篇
    • 评论:9条
    最新评论