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

模板类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(); //反转列表元素

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

时间: 2024-10-03 13:40:09

C++学习笔记之STL标准库(四)list的相关文章

C++学习笔记之STL标准库(二)algorithm头文件即算法

#include <algorithm> algorithm头文件中主要包含的是一大堆模板函数,即STL库提供的算法,可以认为每个函数在很大程度上是独立的.提供的算法种类有: 1)adjacent_find //检测区间内第一对相等的相邻元素 template<class FwIt> FwIt adjacent_find(FwdIt first,FwdIt last);   //如果成功,返回first+N,N满足*(first+N) == *(first+N+1):如果不存在相等

C++学习笔记之STL标准库(六)set/multiset 关联容器

包含头文件 #include <set>  声明命名空间using namespace std; set/multiset是关联容器的一种,它们会对存储的元素进行自动排序,存储元素的值不能直接的被改变,只能通过删除旧值,再插入新值的方式达到更改元素值的目的.set不允许元素的值有重复,而multiset允许有重复的元素,这是他们的唯一区别.关联容器set, multiset以及后面的map, multimap内部采用的是一种非常高效的平衡检索二叉树:红黑树. 1)构造函数 set(); //创

C++学习笔记之STL标准库(八)queue容器适配器

容器适配器并没有直接维护被控序列,而是通过它里面存储的底层容器对象来实现所有的功能. queue类允许在底层数据结构的末尾插入元素,也允许从前面插入元素(先入先出). 包含头文件 #include<queue>  声明命名空间 using namespace std; 常见的queue操作: 1.void push(const T& val); //在队列末尾插入元素(通过调用底层容器的push_back函数实现) 2.void pop(); //在队列前面删除元素(通过调用底层容器的

python基础教程_学习笔记15:标准库:一些最爱——fileinput

标准库:一些最爱 fileinput 重要的函数 函数 描述 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 lineno() 返回当前(累计)的名称 filelineno() 返回当前文件的行数 isfirstline() 检查当前行是否是文件的第一行 isstdin() 检查最后一行是否来自sys.stdin nextfile() 关闭当前文件,移动到下一个文件 close() 关闭序列 fileinput

python基础教程_学习笔记16:标准库:一些最爱——random

标准库:一些最爱 random random模块包括返回随机数的函数,可以用于模拟或者用于任何产生随机输出的程序. 事实上,所产生的数字都是伪随机数,它们以一个可预测的系统作为基础,除非是为了强加密的目标,否则这些随机数还是足够随机的.如果真的需要随机性,可以使用os模块的urandom函数. 重要函数 函数 描述 random() 返回0<=n<1之间的随机实数n,其中0<n<=1 getrandbits(n) 以长整型形式返回n个随机位(二进制数) uniform(a,b) 返

python基础教程_学习笔记17:标准库:一些最爱——time

标准库:一些最爱 time time模块所包含的函数能够实现以下功能: 获取当前时间.操作系统时间和日期.从字符串读取时间以及格式化时间为字符串. 日期可以用实数(从"新纪元"的1月1日0点开始计算到现在的秒数,新纪元是一个与平台相关的年份,对unix来说是1970年),或者是包含有9个整数的元组. 日期元组的字段含义 如元组: (2008,1,21,12,2,56,0,21,0) 表示2008年1月21日12时2分56秒,星期一,且是当年的第21天(无夏令时). 索引 字段 值 0

python基础教程_学习笔记14:标准库:一些最爱——re

标准库:一些最爱 re re模块包含对正则表达式的支持,因为曾经系统学习过正则表达式,所以基础内容略过,直接看python对于正则表达式的支持. 正则表达式的学习,见<Mastering Regular Expressions>(精通正则表达式) re模块的内容 最重要的一些函数 函数 描述 compile(pattern[,flags]) 根据包含正则表达式的字符串创建模式对象 search(pattern,string[,flags]) 在字符串中寻找模式 match(pattern,st

python基础教程_学习笔记20:标准库:一些最爱——os

标准库:一些最爱 os os模块为你提供了访问多个操作系统服务的功能. os和它的子模块os.path还包括一些用于检查.构造.删除目录和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和变量 函数/变量 描述 environ 对环境变量进行映射 system(command) 在子shell中执行操作系统命令 sep 路径中的分隔符 pathsep 分隔路径的分隔符 linesep 行分隔符('\n','\r','\r\n') urandom(n) 返回n字节的加密强随机数据 os

python基础教程_学习笔记13:标准库:一些最爱——sys

标准库:一些最爱 sys sys这个模块让你能够访问与python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描述 argv 命令行参数,包括脚本名称 exit([arg]) 退出当前程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 类似sunos5或者win32的平台标识符 stdin 标准输入流--一个类文件对象 stdout 标准输出流--一个类文件对象 stde