STL入门教程一:vector的使用

         vector应该说是在STL中使用最广泛的容器,也是本人最先学习和使用的STL内容O(∩_∩)O~。为什么vector会使用的非常广泛呢?大家知道,数组是几乎每一种语言都拥有的低级(不是不高级的意思哈,就是比较底层的意思O(∩_∩)O~)数据结构,在我们的工作中,我们会大量的使用数组来表示同一类事物的一个集合。而vector实质上就是一个可以存储任何元素的动态数组。vector虽然不是一个低级的数据结构,但是它各个操作的效率几乎是和数组相同的。只是它会使用比普通数组更多的空间。因为在vector因为空间不足而需要重新分配空间的时候,它一般会分配更多的空间(可能是当前size的1.5倍,这个是由具体实现定义的)。以免每次插入一个新的元素的时候,都会重新分配空间。重新分配空间是vector里面最没有效率的操作,所以大家在使用vector的时候要尽量避免重新分配空间。具体的方法是根据自己的实际需要来设定vector的capacity大小,这个我会在下面详细提到。关于分配空间,还有一点需要重新注意的是:vector一旦重新分配空间后,先前指向该vector的迭代器和引用都会变为无效的迭代器和引用。关于这一点,大家可以这样想,你使用new开辟了一个空间并不断使用元素填充这个空间。后来发现空间不够了,所以你就又重新new了一个更大的空间,并且将以前空间的所有元素拷贝了过去,最后释放了以前的空间。所以指向以前空间的指针(迭代器)和引用就无效了。下面就让我们来看一看vector的具体操作吧。

      构造函数:

      explicit vector (const Allocator& = Allocator());

      默认构造函数,使用代码等价于

     

     

      explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator())

      用n个T类型的元素初始化vector,使用代码等价于

     

 

      template <class InputIterator> vector (InputIterator first, InputIterator last, const Allocator& = Allocator())

      用迭代器first(包含)到last(不包含)之间的元素初始化Vector,使用代码如下

     

     

      vector (const vector<T,Allocator>& x)

      用相同类型的Vector初始化,相同类型的vector表示值类型相同并且分配器类型相同的vector,使用代码如下

     

 

      void push_back (const T& x)

      添加值为x的元素到Vector的末尾,使用代码如下

     

 

       iterator begin() const_iterator begin () const

       iterator end ()   const_iterator end () const

       获取指向vector开始和结尾的迭代器。请注意vector的结尾(end)迭代器并不是指vector的最后一个元素,而是该元素的后一个元素。该概念为所有的容器都通用的概念。使用代码如下

      

 

        reverse_iterator rbegin() const_reverse_iterator rbegin() const

        reverse_iterator rend()    const_reverse_iterator rend() const

       

 

        iterator insert ( iterator position, const T& x )

        在迭代器position处插入值为x的元素,返回新位置的迭代器

        void insert ( iterator position, size_type n, const T& x )

        在迭代器position处插入n个值为x的元素

        template <class InputIterator>
        void insert ( iterator position, InputIterator first, InputIterator last )

        在迭代器position处插入迭代器first(包含)和last(不包含)之间的元素

       

        对于insert操作,需要注意的是在vector执行该操作后,对于该vector以前的迭代器和引用都会失效

       

       

       iterator erase ( iterator position )

       删除迭代器postion处的元素,返回删除元素的后一个元素的迭代器

       iterator erase ( iterator first, iterator last )

       删除迭代器first(包含)到last(不包含)之间的元素,返回最后一个删除元素的后一个元素

      

       请注意,执行删除操作之后,在删除位置之后该vector先前的迭代器和引用就会变为无效。

 

       size_type size() const

       获取vector实际包含的元素数量

       size_type capacity () const

       获取vector所分配空间所能包含元素的数量

      

 

       在使用vector的时候,我们应该注意到这样一个问题,就是需要在vector中不断插入元素的时候。我们应该为vector设置一个重新分配时最少需要分配的元素值。通过这样的设置,我们可以减少vector中重新分配的次数,以使vector的使用达到比较高的效率。我们可以通过下面的函数来设置这个值。

       void reserve (size_type n)

       n为vector重新分配时vector至少要保留存放元素的个数。请注意当设置的n值大于vector的capacity值的时候,会引起vector进行重新分配。

      

 

       void resize (size_type sz, T c = T())

       重新分配vector所占用的空间,如果sz小于当前size,则会截断sz之后的元素, 如果sz大于当前size,则会用c值补充。请注意,resize函数并不能改变由reserve函数所设置的值。这里还要提醒一句的是,所有resize的操作都会使先前指向该vector的指针和引用无效。

      

      

      vector的使用方法大概就是这些了,下一次为大家带来list的使用方法。

      

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值