• STL中 vector 和 list 一些特性


    STL中的vector特点是: 其容量在需要时可以自动分配,本质上是数组形式的存储方式。即在索引可以在常数时间内完成。缺点是在插入或者删除一项时,需要线性时间。但是在尾部插入或者删除,是常数时间的。

    STL的 list 是双向链表:如果知道位置,在其中进行插入和删除操作时,是常数时间的。索引则需要线性时间(和单链表一样)。

    以下是vector和list中常用的方法:

    int size() const  ;  返回容器内所有元素的个数。

    void  clear()  ;    删除容器中所有元素。

    bool  empty() ;    判断容器是否为空,如是,则返回true,否则返回false。

    vector 和 list 都支持在常量的时间内在容器的末尾添加或者删除项,vector和list都支持在常量的时间内访问表的前端的项,操作如下:

    void push_back( const Object & x)  ; 在容器的末尾添加x。

    void pop_back() ; 删除容器的末尾对象。

    const  Object & back() const ; 返回表的末尾的对象。

    const Object & front() const ; 返回表的前端的对象。

    list(双向链表) 中独有的方法,可以在容器的前端进行改变:

     void push_back(const Object & x) ; 在list的前端添加x。

     void pop_front() ;在list前端删除对象。

    vector 中独有的高效索引方法:

    Object & operator[ ] (int idx)  ,使用[ ]索引某个位置的元素,不包含边界检测。

    Object & at (int idx) , 返回vector中idx索引位置的对象,包含边界检测。

    int capacity( ) const ; 返回vector 内部的容量。

    void reserve(int new Capacity): 设定vector的新容量,如果有对vector容量的良好估计,可以避免对vector扩展。

    STL中的vector特点是: 其容量在需要时可以自动分配,本质上是数组形式的存储方式。即在索引可以在常数时间内完成。缺点是在插入或者删除一项时,需要线性时间。但是在尾部插入或者删除,是常数时间的。

    STL的 list 是双向链表:如果知道位置,在其中进行插入和删除操作时,是常数时间的。索引则需要线性时间(和单链表一样)。

    以下是vector和list中常用的方法:

    int size() const  ;  返回容器内所有元素的个数。

    void  clear()  ;    删除容器中所有元素。

    bool  empty() ;    判断容器是否为空,如是,则返回true,否则返回false。

    vector 和 list 都支持在常量的时间内在容器的末尾添加或者删除项,vector和list都支持在常量的时间内访问表的前端的项,操作如下:

    void push_back( const Object & x)  ; 在容器的末尾添加x。

    void pop_back() ; 删除容器的末尾对象。

    const  Object & back() const ; 返回表的末尾的对象。

    const Object & front() const ; 返回表的前端的对象。

    list(双向链表) 中独有的方法,可以在容器的前端进行改变:

     void push_back(const Object & x) ; 在list的前端添加x。

     void pop_front() ;在list前端删除对象。

    vector 中独有的高效索引方法:

    Object & operator[ ] (int idx)  ,使用[ ]索引某个位置的元素,不包含边界检测。

    Object & at (int idx) , 返回vector中idx索引位置的对象,包含边界检测。

    int capacity( ) const ; 返回vector 内部的容量。

    void reserve(int new Capacity): 设定vector的新容量,如果有对vector容量的良好估计,可以避免对vector扩展。

     1 #include <vector> 
     2 #include <list>
     3 #include <iostream>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     vector<int>  v1(10,22);     // 创建一个大小为 10的vector,初始化所有元素为 22 
    10     list<int>  l1;
    11     for(int i = 0; i < 10; i++)  // 创建并初始化一个list  
    12     {
    13         l1.push_back(i);
    14     }
    15     
    16     // 打印 v1 和 l1 的大小 
    17     cout<<"The size of v1: "<<v1.size()<<", "<<"the size of l1: "<<l1.size()<<endl;
    18     
    19     //打印出 v1 
    20     
    21     cout<<"v1: ";
    22     for (int i = 0 ; i < v1.size(); i++)
    23     {
    24         cout<<v1[i]<<" ";
    25     }
    26     cout<<endl;
    27     
    28     // 打印出 l1 
    29     cout<<"l1: ";
    30     for (list<int>::iterator iter = l1.begin(); iter != l1.end(); iter++)
    31     {
    32         cout<<*iter<<" ";    
    33     } 
    34     cout<<endl;
    35     
    36     // 在 v1 末尾添加一项,在 l1 末尾 和头部 各添加一项
    37     
    38     v1.push_back(333);
    39     l1.push_back(111);
    40     l1.push_front(222);
    41     
    42     // 打印v1 
    43     
    44     cout<<"v1: ";
    45     for (int i = 0 ; i < v1.size(); i++)
    46     {
    47         cout<<v1[i]<<" ";
    48     }
    49     cout<<endl;
    50     
    51     // 打印出 l1 
    52     cout<<"l1: ";
    53     for (list<int>::iterator iter = l1.begin(); iter != l1.end(); iter++)
    54     {
    55         cout<<*iter<<" ";    
    56     } 
    57     cout<<endl;
    58      
    59     // 使用 at 访问 v1 中的元素,如果超出下标范围,会报错。 
    60     
    61     cout<<"v1.at(10): "<<v1.at(10)<<endl; 
    62     
    63     // 返回v1 的capacity 
    64     cout<<"v1.capacity(): "<<v1.capacity()<<endl; 
    65     
    66     // 使用 reserve 改变 v1 容量
    67     v1.reserve(26);
    68     cout<<"After reserve ,v1.capacity(): "<<v1.capacity()<<endl; 
    69     return 0;
    70 }
    pp
  • 相关阅读:
    WAP版浏览器不支持.NET的linkButton
    类型初始值设定项引发异常
    磁盘阵列卡
    SQL SERVER 存储过程的天然递归
    Jquery读取返回的JSON数据
    WebView.loadUrl()在真机环境中执行即报错的问题
    permission is only granted to system apps
    Android程序的版本检测与更新
    IE7下浮动(float)层不能实现环绕的问题
    性能优化的一知半解
  • 原文地址:https://www.cnblogs.com/wangxiaoyong/p/8645150.html
Copyright © 2020-2023  润新知