IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    再造轮子(1):STL中vector的实现

    cfylee发表于 2014-12-01 06:01:16
    love 0

    这是再造轮子系列的第一篇文章,稍微的说明下我写这个系列的一些想法,我认为避免成为码农的唯一办法就是把基础打扎实(虽然我经常自嘲是码农,不过这个现状一定会改变)。到底那些是基础呢? 主要是几个方面:数学,操作系统,数据结构,算法, 计算机网络等,需要精通这些知识是需要长时间的学习和练习,深入理解这些知识最好的办法就是重复造轮子,把我造轮子的过程记录下来和大家分享,如果其中又什么错误,欢迎大家指正,又什么不明白的地方可以和我讨论,共同学习进步。最后说明以下为什么选择使用C++和自己实现STL库,使用C++是我想学习这门有难度的语言:) 实现STL这是加深对数据结构和算法的练习,STL是C++编程中经常使用的技术之一,加深对STL库理解提高C++编程水平. here we go!!

    实现vector类所需要的C++知识:类, 构造函数,虚构行数,运算符的重载,模板,迭代器,这里我觉得需要简单介绍的几个概念:

    1. 运算符的重载:运算符重载是多态的一种。这里,运算符(比如 +, = 或 ==)被当作多态函数, 他们的行为随着其参数类型的不同而不
      同。运算符并不一定总是符号。

    2. 模板:模板(template)指C++程序设计语言中的函数模板和类别模板,目前,模板已经成为C++的泛型编程中不可缺少的一部分。

    3. 迭代器:迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍
      访的接口,设计人员无需关心容器物件的内容。

    我将代码push到了我的github上,看代码请点这里

    我所实现的vector类的结构和代码,结构如下图:
    Cvector

    它主要包括了如下几个部分:
    1. 构造函数,虚构函数:Vector(), ~Vector();
    2. 成员函数:resize(), size(), reserve(), empty(), Capacity(), push_back(), pop_back(), back();
    3. 运算符:operator, operator=();
    4. 迭代器: begin(), end();
    5. 私有成员: theSize, theCapacity, Object;

    整体来着代码比较简单,但是还有又一部分代码具有参考价值:
    有关运算符重载的部分:

    const Vector & operator= ( const Vector & rhs ) //实现了赋值运算
    {
        if( this != rhs ){
            delete [] objects;
            theSize = rhs.size;
            theCapacity = rhs.theCapacity;
    
            objects = new Object[ theCapacity() ];
            for(int k = 0; k < size(); k++)
                objects[k] = rhs.objects[k];
        }
            return *this;
    }
    
    Object & operator[] (int index)
    { return objects [index]; }
    
    const Object & operator[] (int index)
    { return objects[index]; }

    有关迭代器的部分:

    iterator begin()
    { return &objects;[0]; }
    
    const_iterator begin() const
    { return &objects;[0]; }
    
    iterator end()
    { return &objects;[ size() ]; }
    
    const_iterator end() const
    {return &objects;[ size() ]; }



沪ICP备19023445号-2号
友情链接