码迷,mamicode.com
首页 > 编程语言 > 详细

C++学习笔记之STL标准库(四)list

时间:2018-04-16 23:59:47      阅读:37      评论:0      收藏:0      [点我收藏+]

标签:eve   space   反向   mes   引用   构造   http   模板   交换   

模板类list是一个容器,所控制的长度N的序列是一个有着N个节点的双向链表。每个节点存储一个单独的元素,一个前驱指针,一个后继指针。list的节点存储在非连续的存储空间中,由于其结构的原因,list的插入、删除、替换等操作速度很快,但元素的查找和随机存取等操作就很慢,需要从头节点一个节点一个节点的往下查找。

包含头文件 #include<list>  声明命名空间 using namespace std;

1)构造函数

  list(); //声明一个空的列表,如:list<int> a;

  list(int nSize); //创建一个空的列表,元素个数为nSize 如:list<int> a(10);

  list(int nSize,const T& val); //创建一个list,元素个数为nSize,且值都为val 如:list<string> a(5,"have fun");

  list(const list&); //拷贝(复制)构造函数

    如:list<string> a(5,"have fun"); 

      list<string> b(a);

  list(begin,end); //复制另一个序列[begin,end)区间内的元素到list中

    如:int ia[6] = { -2, -1, 0, 1, 2, 1024 }; 

      list<int> a(ia,ia+6);

2)快速插值取值函数

  void push_front(const T& val); //列表头部增加一个元素val

    如: list<double> a(5,10.1);
       a.push_front(5.1);
       list<double>::iterator iter;
       for(iter=a.begin();iter!=a.end();iter++)
       {
            cout<<*iter<<endl;
       }

      程序输出:技术分享图片

  void push_back(const T& val); //列表尾部增加一个元素val

    如: list<double> a(5,10.1);
       a.push_back(5.1);
       list<double>::iterator iter;
       for(iter=a.begin();iter!=a.end();iter++)
       {
         cout<<*iter<<endl;
       }

      程序输出:技术分享图片

  void assign(size_type n,const T& x); //重置列表,把列表设置为由n个元素组成的值为x的新列表

    如: list<double> a(5,10.1);
       a.assign(2,5.1);
       list<double>::iterator iter;
       for(iter=a.begin();iter!=a.end();iter++)
       {
         cout<<*iter<<endl;
       }

      程序输出:技术分享图片

  void assign(const_iterator first,const_iterator last); //重置列表,把列表中[first,last)的元素设置成当前元素

    如: list<double> a(5,10.1);
       list<double> b(3,5.1);
       a.assign(b.begin(),b.end());
       list<double>::iterator iter;
       for(iter=a.begin();iter!=a.end();iter++)
       {
            cout<<*iter<<endl;
       }

      程序输出:技术分享图片

  iterator insert(iterator it,const T& x); //列表中迭代器指向元素前增加一个元素x

    如: list<double> a(5,10.1);
       a.insert(++a.begin(),5.1); //这里不能用a.begin()+1,会报错,原因还没查找到资料
       list<double>::iterator iter;
       for(iter=a.begin();iter!=a.end();iter++)
       {
         cout<<*iter<<endl;
       }

      程序输出:技术分享图片

  iterator insert(iterator it,int n,const T& x); //列表中迭代器指向元素前增加n个相同的元素x

    如: list<double> a(5,10.1);

       a.insert(++a.begin(),2,5.1); //这里不能用a.begin()+1,会报错,原因还没查找到资料
       list<double>::iterator iter;
       for(iter=a.begin();iter!=a.end();iter++)
       {
         cout<<*iter<<endl;
       }

      程序输出:技术分享图片

  iterator insert(iterator it,const_iterator first,const_iterator last); //列表中迭代器指向元素前插入另一个相同类型列表的[first,last)间的数据

    如: list<double> a(5,10.1);
       list<double> b(2,5.1);
       a.insert(++a.begin(),b.begin(),b.end());
       list<double>::iterator iter;
       for(iter=a.begin();iter!=a.end();iter++)
       {
         cout<<*iter<<endl;
       }

      程序输出:技术分享图片

3)删除函数

  iterator erase(iterator it); //删除列表中迭代器指向元素;

  iterator erase(iterator first,iterator last); //删除列表中[first,last)中元素,注意last是指向要删除的最后一个元素的下一个元素;

  void pop_front(); //删除列表的第一个元素,列表不能为空

  void pop_back(); //删除列表的最后一个元素,列表不能为空

  void clear(); //清空列表中所有元素,功能等同于erase(list.begin(),list.end());

  void remove(const T& x); //移除列表中所有值为x的元素

  void remove_if(Pred pr); //移除列表中所有令pr(x)==true的元素

  void unique(); //删除列表中相邻的重复元素,一般排序后再去重

  void unique(Pred pr); //使用pr来判定是否删除元素

4)遍历函数

  reference front(); //返回首元素的引用

  reference back(); //返回尾元素的引用

  iterator begin(); //返回列表头指针,指向第一个元素

  iterator end(); //返回列表尾指针,指向列表最后一个元素的下一个位置

  reverse_iterator rbegin(); //反向迭代器,指向最后一个元素

  reverse_iterator rend(); //反向迭代器,指向第一个元素之前的位置

5)判断函数

  bool empty() const:判断列表是否为空,若为空,则返回true

6)大小函数

  void resize(size_type n); //将列表的元素调整到n个,多删少补,值随机

  void resize(size_type n,T& x); //将列表的元素调整到n个,多删少补,值为x

  int size() const; //返回当前列表中元素的个数

  int max_size() const; //返回最大可允许的list元素数量值

7)其他函数

  void swap(list& x); //交换两个list中的元素

  void splice(iterator it,list& x); //把列表x链接到当前列表迭代器it指向的位置,列表x变为空

  void splice(iterator it,list& x,iterator first); //把列表x的first位置的元素链接到当前列表迭代器it指向的位置,列表x中删除first指向的元素

  void splice(iterator it,list& x,iterator first,iterator last); //把列表x的[first,last)位置的元素链接到当前列表迭代器it指向的位置,列表x中删除区间[first,last)

  void merge(list& x);合并两个链表并使之默认升序

  void merge(list& x,Pred pr); //合并两个链表,排序根据比较函数pr()决定

  void sort(); //对链表排序,默认升序

  void sort(Pred pr); //对链表排序,排序根据比较函数pr()决定

  void reverse(); //反转列表元素

C++学习笔记之STL标准库(四)list

标签:eve   space   反向   mes   引用   构造   http   模板   交换   

原文地址:https://www.cnblogs.com/jason-20160301/p/8850104.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!