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

转载 2012年03月23日 16:03:10

下面的代码只是在简单的模拟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 

【STL】迭代器与List的模拟实现

什么是List List是STL库(标准模板库)中的一个容器。它的实质上就是一个双向链表,而且要注意的是,这个双向链表是有头的; 这样的设计是STL中一个很巧妙的地方, 它解决了: (1)插入数据时的...
  • qq_31828515
  • qq_31828515
  • 2016年12月22日 21:24
  • 859

【C++】:STL迭代器使用详解,很好很详细

写在前面,迭代器这种东西,就是为了使访问简单!! 容器::iterator iter; for(iter= 容器.begin();iter!=容易.end();iter++){ coutfirst等等...
  • qq_23100787
  • qq_23100787
  • 2016年05月12日 22:28
  • 7200

C++ STL 容器、迭代器、适配器

1、容器vector,list,deuqe是C++STL中三种基本容器实现,它们不可能互为实现同时又不损失效率 2、stack和queue则都可以在这三种基本容器序列基础上实现,所以没有定义为独立...
  • richrdbird
  • richrdbird
  • 2016年03月31日 15:36
  • 1752

《STL源码剖析》学习之迭代器

在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通...
  • shudou
  • shudou
  • 2013年09月08日 22:54
  • 5825

C++标准模板库(STL)迭代器的原理与实现

迭代器(iterator)是一种抽象的设计理念,本文探讨了迭代器的作用与原理,实现了简单的迭代器,并采用trait编程技巧编写了简单算法验证。...
  • wutao1530663
  • wutao1530663
  • 2017年03月22日 19:18
  • 1772

c++ STL中容器迭代器失效

参考:http://www.cnblogs.com/yuanshuang/p/5777905.html http://blog.csdn.net/aa838260772/article/deta...
  • petersmart123
  • petersmart123
  • 2016年11月23日 14:07
  • 1013

C++ STL 迭代器失效问题

之前看《C++ Primier》的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究。今天写程序的时候遇到了这个问题。 1 莫名其妙的Erase     最初我...
  • coderCong
  • coderCong
  • 2016年07月29日 15:03
  • 2483

STL中四种随机迭代器

1. 迭代器的存在价值:为所有容器提供一组公共接口,可以遍历容器中所有元素,可以看做是一种smart pointer,因为它重载了++和 * 运算符 2. 四种随机迭代器 vector::iter...
  • meetings
  • meetings
  • 2015年07月20日 08:37
  • 928

【C++】STL常用容器总结之一:容器与迭代器

声明: 1、本博文主要整理自《C++ Primer》和《STL源码剖析》这两本经典书籍。同时,也参考了网络中不少优秀博客,对这些博客的作者表示感谢。 2、由于博主能力有限,对于一些容器的用法可能尚...
  • hero_myself
  • hero_myself
  • 2016年08月24日 22:46
  • 2711

C++ STL 基础及应用(3) 迭代器

迭代器(Iterator)是 STL 的核心技术,提供了统一访问容器元素的方法,为编写通用算法提供了坚实的技术基础。 本章将带你编写一个自带迭代器的数组类和一个自带迭代器的链表类,模拟 STL 中的容...
  • Raito__
  • Raito__
  • 2016年05月24日 23:59
  • 5465
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ STL 迭代器的简单模拟
举报原因:
原因补充:

(最多只允许输入30个字)