C++ Vector 向量容器

 Vector 一个线性顺序结构的容器。相当于数组,但是其大小可以不预先指定,并且自动扩展,它可以像数组一样操作,但是由于它的特性我们可以将他看做动态数组,

           在创建一个VECTOR 变量后他会自动在内存中分配一块连续的内存空间进行数据存储,初始大小可以预先指定也可以由vector默认指定,这个大小就是capacity()函数的返回值。当存储的数据超过分配的空间是vector会重新分配内存,然后将以前的内容复制到新的空间中,所以重新分配空间比较费时,效率也很低。它的具体步骤如下:

            首先,vector  会申请一块更大的内存块;   
            然后,将原来的数据拷贝到新的内存块中;   
            其次,销毁掉原内存块中的对象(调用对象的析构函数);   
            最后,将原来的内存空间释放掉。 

            如果vector  保存的数据量很大时,这样的操作一定会导致糟糕的性能(这也是vector 被设计成比较容易拷贝的值类型的原因)。所以说vector 不是在什么情况下性能都好,只有在预先知道它大小的情况下vector 的性能才是最优的。   

              vector 的特点: 
                                (1) 指定一块如同数组一样的连续存储,但空间可以动态扩展。即它可以像数组一样操作,并且可以进行动态操作。通常体现在push_back() pop_back()  。 
                                (2) 随机访问方便,它像数组一样被访问,即支持[ ]  操作符和vector.at() 
                                (3) 节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是要明确一点vector  大多情况下并不是满存的,在未存储的区域实际是浪费的。   
                                (4) 在内部进行插入、删除操作效率非常低,这样的操作基本上是被禁止的。Vector 被设计成只能在后端进行追加和删除操作,其原因是vector 内部的实现是按照顺序表的原理。 
                                (5) 只能在vector  的最后进行push  和pop ,不能在vector  的头进行push  和pop  。  
                                (6) 当动态添加的数据超过vector 默认分配的大小时要进行内存的重新分配、拷贝与释放,这个操作非常消耗性能。 所以要vector 达到最优的性能,最好在创建vector 时就指定其空间大小。 
Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。

       
            1.Constructors  构造函数 
                        vector<int> v1; //构造一个空的vector 
                        vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的Vector 
            2.Operators 对vector进行赋值或比较 
                       C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <, 和  >.   
                      要访问vector中的某特定位置的元素可以使用  [] 操作符.   
              两个vectors被认为是相等的,如果:   
                         1.它们具有相同的容量   
                         2.所有相同位置的元素相等.   
              vectors之间大小的比较是按照词典规则. 
            3.assign() 对Vector中的元素赋值 
                  语法: 
                      void assign( input_iterator start, input_iterator end ); 
                      // 将区间[start, end)的元素赋到当前vector 
                      void assign( size_type num, const TYPE &val ); 
                      // 赋num个值为val的元素到vector中,这个函数将会清除掉为vector赋值以前的内容.       

            4.at() 返回指定位置的元素 
               语法: 
                TYPE at( size_type loc );//差不多等同v[i];但比v[i]安全; 
            5.back() 返回最末一个元素 
            6.begin() 返回第一个元素的迭代器 
            7.capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下) 
            8.clear()  清空所有元素 
            9.empty() 判断Vector是否为空(返回true时为空) 
            10.end()  返回最末元素的迭代器(译注:实指向最末元素的下一个位置) 
            11.erase()  删除指定元素 
                语法: 
                         iterator erase( iterator loc );//删除loc处的元素 
                         iterator erase( iterator start, iterator end );//删除start和end之间的元素 
           12.front()  返回第一个元素的引用 
           13.get_allocator()  返回vector的内存分配器  

           14.insert()  插入元素到Vector中 
                    语法: 
                             iterator insert( iterator loc, const TYPE &val ); 
                             //在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器, 
                             void insert( iterator loc, size_type num, const TYPE &val );   
                             //在指定位置loc前插入num个值为val的元素 
                             void insert( iterator loc, input_iterator start, input_iterator end ); 
                             //在指定位置loc前插入区间[start, end)的所有元素 
             15.max_size()  返回Vector所能容纳元素的最大数量(上限) 
             16.pop_back() 移除最后一个元素 
             17.push_back() 在Vector最后添加一个元素 
             18.rbegin()  返回Vector尾部的逆迭代器 
             19.rend() 返回Vector起始的逆迭代器 
              20.reserve()  设置Vector最小的元素容纳数量 
               //为当前vector预留至少共容纳size个元素的空间 
              21.resize()  改变Vector元素数量的大小 
                        语法:

                          void resize( size_type size, TYPE val );   
                         //改变当前vector的大小为size,且对新创建的元素赋值val 
               22.size()  返回Vector元素数量的大小 
               23.swap() 交换两个Vector 
                     语法: 
                        void swap( vector &from );

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值