LinuxC/C++编程基础(4) 基于泛型实现vector

一.vector泛型类的定义,如下:

#ifndef VECTOR_H_

#define VECTOR_H_
#include <stdio.h>
template<class Object>
class Vector {
public:
    explicit Vector(int initsize = 0) :
            theSize(initsize), theCapacity(initsize + SPACE_CAPACITY) {
        datas = new Object[theCapacity];
    }
    Vector(const Vector & rhs) :
            datas(NULL) {
        operator=(rhs);
    }
    ~Vector() {
        delete[] datas;
    }

    const Vector & operator=(const Vector& rhs) {
        if (&rhs != this) {
            delete[] datas;
            theSize = rhs.size();
            theCapacity = rhs.capacity();

            datas = new Object[theCapacity];
            for (int k = 0; k < theSize; ++k)
                datas[k] = rhs.datas[k];
        }
        return *this;
    }

    void resize(int newSize) {
        if (newSize > theCapacity)
            reserve(newSize * 2 + 1);
        theSize = newSize;
    }

    void reserve(int newCapacity) {
        if (newCapacity < theSize)
            return;

        Object* olddatas = datas;
        datas = new Object[newCapacity];

        for (int k = 0; k < theSize; ++k)
            datas[k] = olddatas[k];

        theCapacity = newCapacity;
        delete[] olddatas;
    }

    Object& operator[](int index) {
        return datas[index];
    }

    const Object& operator[](int index) const {
        return datas[index];
    }

    bool empty() const {
        return theSize == 0;
    }
    int size() const {
        return theSize;
    }
    int capacity() const {
        return theCapacity;
    }

    void push_back(const Object & x) {
        if (theSize == theCapacity)
            reserve(2 * theCapacity + 1);
        datas[theSize++] = x;
    }

    void pop_back() {
        theSize--;

    }

    const Object& front() const{//返回第一个元素的引用
        return datas[0];

    }

    const Object& back() const {
        return datas[theSize - 1];
    }

    typedef Object* iterator;
    typedef const Object* const_iterator;

    iterator begin() {
        return &datas[0];
    }
    const_iterator begin() const {
        return &datas[0];
    }

    iterator end() {
        return &datas[size()];
    }
    const_iterator end() const {//end()函数返回的是vector末端的下一个位置,必须注意
        return &datas[size()];
    }

    enum {
        SPACE_CAPACITY = 16
    };

private:
    int theSize;
    int theCapacity;
    Object * datas;
};

#endif /* VECTOR_H_ */

二.main.cpp函数的实现,如下:

#include "Vector.h"
int main(int argc, char* argv[])
{
    Vector<int> vec;
    Vector<int>::iterator it;
    for(int j=0;j<5;++j){
        vec.push_back(j);
    }
    for(it=vec.begin();it != vec.end();++it){
        cout<<*it<<endl;
    }
    return 0;
}


未完待续~


参考文献:http://blog.csdn.net/luxiaoxun/article/details/7433373

转载请注明出处:山水间博客,http://blog.csdn.net/linyanwen99/article/details/8209099



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值