zoukankan      html  css  js  c++  java
  • STL之vector容器的实现框架

    说明:本文仅供学习交流,转载请标明出处,欢迎转载。

           实现vector容器的思路等同于实现一个动态数组,以下我们參照源代码的相关资料,给出一个vector容器的大致框架,仅仅有声明,没给出详细的实现。

           代码的框架注意从下面几个方面给出:

           (1)空间分配属性,因为是对外封闭的,故为procted;

           (2)共同拥有訪问的属性,可供外部用户訪问,定义为public;

           (3)容器的构造函数与析构函数;

           (4)vector容器的插入操作。

           (5)vector容器的删除操作;

           (6)vector容器的大小操作;

           (7)vector容器的訪问操作。

             详细的大致框架例如以下所看到的:

    #include<iostream>
    #include<cstddef>//用到了size_t和ptrdiff_t
    using namespace std;
    template<class T,class Alloc=alloc>
    class vector
    {
    	protected:
    		typedef simple_alloc<value_type,Alloc>data_allocator;//定义一个空间分配器
    		iterator start;//起始地址
    		iterator finish;//容器实际大小的末端
    		iterator end_of_storage;//容器最大可容大小的末端
    
    		void fill_initialize(size_type n,const T&x);//分配n个元素的大小,初值为x
    		void deallocate();//释放整个容器空间
    	public:
    		/*******公有属性,类型别名************/
    		typedef T value_type;//元素类型
    		typedef value_type* pointer;//指针类型
    		typedef value_type* iterator;//迭代器类型
    		typedef const value_type* const_iterator;//指向常量的迭代器类型
    		typedef value_type& reference;//引用类型
    		typedef size_t size_type;//大小类型
    		typedef ptrdiff_t difference_type;//指针差值类型
    
    		/***********构造/析构函数*************/
    		vector();//默认构造函数
    		explicit vector(size_type n);//单形參构造函数,explicit防止类型的隐式转化
    		vector(size_t n,const T & t);//带初值的构造函数
    		~vector();//析构函数
    
    		/***********插入操作******************/
    		void push_back(const T& t);//后插入值t
    		iterator insert(iterator iter,const T& t);//在iter前插入值t
    		void insert(iterator iter,size_type n,const T& t);//在iter前插入n个初值为t的元素
    		void insert(iterator iter,iterator b,iterator e);//在iter前插入迭代器范围[b,e)的元素
    
    		/***********删除操作******************/
    		iterator erase(iterator iter);//删除iter所指向的元素
    		iterator erase(iterator b,iterator e);//删除迭代器范围[b,e)所指向的元素
    		void clear();//清除容器内全部的元素
    		void pop_back();//将容器的最后一个元素弹出
    
    		/***********大小操作******************/
    		size_type size()const;//获取实际使用的大小
    		size_type max_size()const;//获取编译器可申请的最大大小。以元素的个数为单位
    		size_type capacity()const;//获取容器当前的容量
    		bool empty()const;//是否为空容器
    		void resize(size_type n);//将容器的实际大小调整为n
    		void resize(size_type n,const T& t);//将容器的时间大小调整为n,并提供必要的初值t
    
    		/***********訪问操作******************/
    		iterator begin();//取容器头指针
    		iterator end();//取容器最后一个元素的下一个指针
    		reference operator[](size_type i);//v[i]
    		reference at(size_type i);//取容器的第i个元素,等价于v[i]
    		reference front();//返回容器头部元素的值
    		refrence back();//返回容器尾部元素的值
    };

    參考文献:

    [1]《C++ primer 第四版》

    [2]《STL源代码剖析 侯捷》

  • 相关阅读:
    CS229 6.4 Neurons Networks Autoencoders and Sparsity
    CS229 6.3 Neurons Networks Gradient Checking
    【Leetcode】【Easy】Min Stack
    【Leetcode】【Easy】Merge Sorted Array
    【Leetcode】【Easy】ZigZag Conversion
    【Leetcode】【Easy】Valid Palindrome
    【Leetcode】【Easy】Reverse Integer
    【Leetcode】【Easy】Palindrome Number
    【Leetcode】【Easy】Length of Last Word
    【Leetcode】【Easy】Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5133035.html
Copyright © 2011-2022 走看看