c++ 顺序容器---vector

对顺序容器这四个字一直不太理解,《c++primer》中对其作出解释为:为程序员提供了控制元素存储访问顺序的能力。换种方式理解:不管是在这类容器中存储元素,访问元素还是删除元素,它都其自身的数据结构特点确定了一定的访问顺序,是一种有序的访问,并非无序的访问。

如图1,顺序容器如下:


----先说vector---/

vector的结构如下:

template<class T, class A = allocator<T> >
    class vector {
public://下面的都是用typedef对已有类型重命名,涉及到迭代器的知识
    typedef A allocator_type;
    typedef A::size_type size_type;
    typedef A::difference_type difference_type;
    typedef A::reference reference;
    typedef A::const_reference const_reference;
    typedef A::value_type value_type;
    typedef T0 iterator;
    typedef T1 const_iterator;
    typedef reverse_iterator<iterator, value_type, reference, A::pointer, difference_type>  reverse_iterator;
    typedef reverse_iterator<const_iterator, value_type,const_reference, A::const_pointer, difference_type>  const_reverse_iterator;
    explicit vector(const A& al = A());//explict关键字,代表显示的构造,即不能隐式转换,不能进行类型的隐士转换,默认构造函数都是implicit
    explicit vector(size_type n, const T& v = T(), const A& al = A());
    vector(const vector& x);//vector构造函数,输入一个容器类型的数据
    vector(const_iterator first, const_iterator last,const A& al = A());//vector构造函数,输入迭代起始位置和空间配置器对像
    void reserve(size_type n);//为容器对象预留n个数据大小,实际不占用内存
 
size_type capacity() const;//返回已经分配到空间的元素个数
iterator begin();//返回指向第一个元素的迭代器
const_iterator begin() const;//同上,不同点在于调用这两个函数的对象要求不同,上面的调用对象不能为常对象。下面返回时必须用常迭代器来接 iterator end(); iterator end() const;//返回指向最后一个元素的后一个位置的迭代器,区别同上 reverse_iterator rbegin(); const_reverse_iterator rbegin() const;//返回一个反迭代器,即指向末尾指针,是逆序的开始。末尾指针:最后一个元素的后一个元素 reverse_iterator rend(); const_reverse_iterator rend() const;//返回一个反迭代器,指向第一个指针。是逆序的结束。 void resize(size_type n, T x = T());//申请n个空间位置,已经被allocate过 size_type size() const;//返回元素个数 size_type max_size() const;//返回vector最大容纳的元素个数,一般为2的30次方,根据系统判断,32位系统是这样 bool empty() const;//判断容器是否为空 A get_allocator() const;//返回空间配置器 reference at(size_type pos);//返回位置pos所对应的相关元素 const_reference at(size_type pos) const;//同上 reference operator[](size_type pos);//同上,不同在于,[]是通过对符号的重载进行访问 const_reference operator[](size_type pos);//同上 reference front(); const_reference front() const;//非空的条件下,返回第一个元素 reference back(); const_reference back() const;//非空的条件下,返回最后一个元素 void push_back(const T& x);//插入元素x,在最后的位置 void pop_back();//非空条件下,删除最后一个位置的元素 void assign(const_iterator first, const_iterator last);// 将区间[first,last)的元素赋值到当前的vector容器中, void assign(size_type n, const T& x = T());// 或者赋n个值为x的元素到vector容器中,这个容器会清除掉vector容器中以前的内容 iterator insert(iterator it, const T& x = T());//在it所指位置插入元素x,并且返回该插入元素的位置 void insert(iterator it, size_type n, const T& x);//在it所指位置插入n个元素值都为x void insert(iterator it, const_iterator first, const_iterator last);//插入【first,last】,所指元素的值到it所指的位置上 iterator erase(iterator it);//删除it所指位置的元素,返回被删除元素的下一个元素 iterator erase(iterator first, iterator last);//删除从first到last的元素,返回最后一个删除元素的下一个元素 void clear();//清空从第一个元素到最后一个元素的所有元素 void swap(vector x);//元素交换,如果两个元素的空间配置器相同,立即交换,否则,在两个容器中重新进行构造对象并赋值protected: A allocator; };

总结vector的函数如下图,并不准确,是用来自己方法查找的。

该内存增长方式如图。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值