zoukankan      html  css  js  c++  java
  • C++ List

           List是一个线性表结构,它的数据结构由若干个节点构成,每一个节点都包括一个信息块(即实际的存储的数据),一个前驱指针和一个后驱指针,它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素来链接起来。

           由于其结构的原因,list随机检索的性能非常不好,因为他不像vector那样连续的存储,能直接找到元素,而是要从头一个一个的顺序查找,这样目标元素越靠后,它的检索时间就越长,检索时间与目标元素的位置成正比。

         虽然随机检索的速度不够快,但是它可以迅速的在任何节点进行插入和删除,因为list的每个节点保存着它在链表中的位置,插入和删除一个元素最多影响三个元素,不像vector会对操作点之后的所有元素的存储地址都有所影响,这一点vector不可比拟的。

        list的特点:

          (1) 不使用连续的存储空间这样可以随意的进行动态操作。

          (2) 可以在内部任意位置快速的插入和删除,当然也可以在两端进行push和pop操作。
          (3) 不能进行内部的随机访问,即不支持[]操作和vector.at(); 

         List将元素按顺序存储在链表中,与向量vector相比,它允许快速的插入和删除,但是随机访问却比较慢。

    List操作函数:

      1.assign() 给list赋值

                  语法: 
                    void assign( input_iterator start, input_iterator end );   
                    //以迭代器start和end指示的范围为list赋值 
                    void assign( size_type num, const TYPE &val ); 
                  //赋值num个以val为值的元素。

      2.back() 返回最后一个元素的引用 


      3.begin() 返回指向第一个元素的迭代器 


      4.clear()  删除所有元素 


      5.empty() 如果list是空的则返回true 


      6.end() 返回末尾的迭代器 


      7.erase()  删除一个元素 
                语法: 
                   iterator erase( iterator loc );//删除loc处的元素 
                   iterator erase( iterator start, iterator end ); //删除start和end之间的元素


      8.front() 返回第一个元素的引用

      9.get_allocator()  返回list的配置器 


      10.insert()  插入一个元素到list中 
               语法: 
                  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)的所有元素 


      11.max_size()  返回list能容纳的最大元素数量 


      12.merge() 合并两个list 
                  语法: 

                       void merge( list &lst );//把自己和lst链表连接在一起 
                       void merge( list &lst, Comp compfunction ); 
                       //指定compfunction,则将指定函数作为比较的依据。

      13.pop_back() 删除最后一个元素 


      14.pop_front() 删除第一个元素 


      15.push_back() 在list的末尾添加一个元素 


      16.push_front()  在list的头部添加一个元素 


      17.rbegin()  返回指向第一个元素的逆向迭代器 


      18.remove()  从list删除元素 
               语法: 
                    void remove( const TYPE &val ); 
                    //删除链表中所有值为val的元素 


      19.remove_if()  按指定条件删除元素 


      20.rend() 指向list末尾的逆向迭代器 


      21.resize()  改变list的大小 
                  语法: 
                       void resize( size_type num, TYPE val );   
                       //把list的大小改变到num。被加入的多余的元素都被赋值为val22. 


      22.reverse()  把list的元素倒转  

      23.size()  返回list中的元素个数 


      24.sort()  给list排序 
                     语法:   
                        void sort();//为链表排序,默认是升序 
                        void sort( Comp compfunction );//采用指定函数compfunction来判定两个元素的大小。 


      25.splice()  合并两个list 
                  语法:   
                      void splice( iterator pos, list &lst );//把lst连接到pos的位置 
                      void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到现链表的pos上
                      void splice( iterator pos, list &lst, iterator start, iterator end );//用start和end指定范围。 


      26.swap() 交换两个list 
                     语法: 
                       void swap( list &lst );// 交换lst和现链表中的元素 


      27.unique() 删除list中重复的元素 
                     语法: 
                        void unique();//删除链表中所有重复的元素 
                        void unique( BinPred pr );// 指定pr,则使用pr来判定是否删除。 

  • 相关阅读:
    Linux IO接口 监控 (iostat)
    linux 防火墙 命令
    _CommandPtr 添加参数 0xC0000005: Access violation writing location 0xcccccccc 错误
    Visual Studio自动关闭
    Linux vsftpd 安装 配置
    linux 挂载外部存储设备 (mount)
    myeclipse 9.0 激活 for win7 redhat mac 亲测
    英文操作系统 Myeclipse Console 乱码问题
    Linux 基本操作命令
    linux 查看系统相关 命令
  • 原文地址:https://www.cnblogs.com/7code/p/5049020.html
Copyright © 2011-2022 走看看