STL:vector内部实现原理及基本用法

这篇博客探讨了STL中的vector类实现,包括其内部结构和供内外部使用的接口。重点讲解了push_back和insert函数的工作方式,并提供了自定义函数的示例,最后通过测试代码展示了vector的实际运用。
摘要由CSDN通过智能技术生成

1.vector类的实现

重要结构定义:

template<class T>
class myVector{
public:
    typedef T value_type;//元素类型  起别名
    typedef value_type* pointer;//
    typedef value_type* iterator;//迭代器
    typedef value_type& reference;//引用
    typedef const value_type* const_pointer;//常量指针
    typedef const value_type& const_reference;//常量引用
    typedef size_t size_type;//数据类型基本尺寸大小
private:
    iterator start;
    iterator finish;
    iterator end_of_storage;

供类内部以及派生类使用:

protected:
//分配空间并填充初始值, 不返回任何值
void __allocate_add_fill(size_type n, const T& value){
        iterator result = (iterator)malloc(n*sizeof(T));
        if (result){//result!=0  申请内存成功,在得到的内存上创建对象
            start = result;
            end_of_storage = start + n;
            finish = end_of_storage;
            while (n--){
                //指针偏移,进行赋值
                construct(result, value);//在内存上,一个个的进行构造对象
                ++result;
            }
        }
        else{
            cout << "内存不足,程序终止!" << endl;
            exit(0);
        }
    }
//分配空间 从first开始复制n个值到新空间中, 并返回新开辟的空间的首地址
    iterator __allocate_and_copy(iterator first, size_type n){
        //内存申请
        iterator result = (iterator)malloc(n*sizeof(T));
        iterator _start = result;
        if (0 != result){
            while(n--){
                construct(result, *first);
                ++result;
                ++first;
            }
            cout << endl;
        }
        else{
            cout << "内存不足,程序终止!" << endl;
            exit(0);
        }
        return _start;
    }
//将first到last迭代器之间(first,last)的元素拷贝到_start开始的内存中, 并返回 指向 拷贝完所有数据之后最后一个数据的下一个位置的指针
    iterator __copy(iterator first, iterator last, iterator _start){
        while (first < last){
            *_start++ = *first++;
        }
        return _start;
    }
//将first到last迭代器之间(first,last)的元素重新赋值
iterator __fill(iterator first, iterator last, const T& value){
    while (first < last){
        *first++ = value;
    }
    return first;
}
//自己写的 从迭代器first开始填充n个值为value的元素
iterator __fill_n(iterator first, size_type n, const T& value){
    while (n--){
        *first++ = value;
    }
    return first;
}
//自己写的  将从 [first,last)所有元素 一一依次后移, 最后的一个元素移到end的位置
void __backCopy
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值