列表容器主要用于存放链表,其中的链表是双向链表,可以从任意一端开始遍历。列表容器是需要按顺序访问的容器。另外,列表容器不支持随机访问迭代器,因此某些算法不能适合于列表容器。列表容器还提供了另一种操作---拼接(splicing),其作用是将一个序列中的元素插入到另一个序列中。其头文件为<list>

1、列表容器的构造函数

4种形式的构造函数:

list();//构造size()为0的列表容器

list(sizt_type n,const T& v=T());//初始化一个大小为n的列表容器,把列表容器中的每个对象初始化为T()构造的对象

list(const list& x);//按另一个列表容器x初始化列表

list(const_iterator first,const_iterator last);//从另一个支持const_iterator的容器中选取一部分来建立一个新的列表容器

2、使用列表容器

1)访问列表容器信息

有如下函数可以使用:begin()、end()、rbegin()、rend()、size()、max_size()、empty()、front()和back()等

2)向列表容器中放置元素

与向量和双端队列容器一样,也有insert函数,但是不同的是,列表容器的insert函数不会使任何迭代器或引用变得无效。

列表容器中的拼接函数splice函数就是用来重组列表的,其原型如下:

void splice(iterator it,list& x);//将列表x中的元素插入到当前列表中it之前,删除x中的元素,使之为空;注意x与当前列表不能是同一个。

void splice(iterator it,list& x,iterator first);//将first所指向的元素从列表x中移出,并插入到当前列表中it之前,x与当前列表可以是同一个,如果it==first或it==++first,则次函数什么也不做。

void splice(iterator it,list& x,iterator first,iterator last);//将范围[first,last]中的元素从列表x中移出,并插入到当前列表中it之前,x与当前列表可以是同一个,这是范围[first,last]不能包含it所指的元素

3)删除列表容器中的元素

与向量和双端队列容器一样,列表容器也提供了erase()成员函数,但是该函数仅删除指向被删除元素的迭代器和引用,另外,列表容器的成员函数remove()可以从列表容器中删除与x相等的元素,同时会减小列表容器的大小,其减小的数量等于被删除的元素个数,原型如下:

void remove(const T& x);//删除与x相同的元素

4)例子

#include<iostream>

#include<list>

using namespace std;

int main()

{

list<int> link;//构造一个列表用于存放整数链表

int i, key, item;

for (i = 0; i < 10; i++)//输入10个整数依次向表头插入

{   cin >> item;

link.push_front(item);

}

cout << "List:";//输出链表

list<int>::iterator p = link.begin();//迭代器p用于遍历链表

while (p!=link.end())

{

cout << *p << " ";

p++;//使p指向下一个结点

}

cout << endl;

cout << "请输入一个需要删除的整数:";//输入需要删除的整数

cin >> key;

link.remove(key);

cout << "List:";//输出链表

p = link.begin();//使p重新指向表头

while (p != link.end())//输出各结点数据,直到链表尾

{   cout << *p << " ";   p++;  }

getchar();

getchar();

cout << endl;

}

8、泛型程序设计与c++标准模板库2.4列表容器的更多相关文章

  1. 8、泛型程序设计与c++标准模板库2.2向量容器

    向量容器属于顺序容器,用于容纳不定长线性序列(即线性群体),提供对序列的快速随机访问(也称直接访问).这一点与c++语言支持的基本数组类型相同,但基本数据类型不是面向对象的.而面向对象的向量是动态结构 ...

  2. 8、泛型程序设计与c++标准模板库2、c++标准模板库中的容器

    顺序容器类以逻辑线性排列方式存储元素,在这些容器类型中的元素在逻辑上被认为是连续的存储空间中存储的.顺序容器可用于存储线性群体. 在关联容器类中,元素的存储和检索基于关键字和元素与其他元素之间的关系, ...

  3. 8、泛型程序设计与c++标准模板库1、泛型程序设计的概念和术语

    有效地利用已有的成果,将经典的.优秀的算法标准化.模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想. c++语言提供的标准模板库( ...

  4. 8、泛型程序设计与c++标准模板库4.标准c++库中的算法

    标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...

  5. C++学习笔记53:泛型程序设计与C++标准模板库

    泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如: ...

  6. 8、泛型程序设计与c++标准模板库2.5容器适配器

    容器适配器是用来扩展7中基本容器的,是修改和调整其他类接口的类.他们不提供存放数据的实际数据结构的实现方法,而且容器适配器也不支持迭代器. 1.标准栈容器 使用STL中的标准栈为程序员提供了一层附加的 ...

  7. 8、泛型程序设计与c++标准模板库3.迭代器

    理解迭代器对于理解STL框架并掌握STL的使用至关重要.简单地说,迭代器是面向对象版本的指针,STL算法利用迭代器对存储在容器中的元素序列进行遍历,迭代器提供了访问容器和序列中每个元素的方法. 虽然指 ...

  8. 8、泛型程序设计与c++标准模板库5.函数对象

    1.函数对象 函数对象是STL提供的第四类主要组件,它使得STL的应用更加灵活方便,从而增强了算法的通用性.大多数STL算法可以用一个函数对象作为参数.所谓“函数对象”其实就是一个行为类似函数的对象, ...

  9. 8、泛型程序设计与c++标准模板库2.3双端队列容器

    双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为& ...

随机推荐

  1. [原创]关于在CentOS 7.0 下 安装nfs ,遇见 Transaction check error问题的解决

    今天小弟的同学在使用阿里云的服务器安装nfs的时候,出现了一下问题 Transaction check error: file /usr/lib/systemd/system/blk-availabi ...

  2. java面试_数据库

    1.group by 根据表里的字段名分类,相同字段名只显示一行记录,通常与聚集函数max.min合用选择最大值最小值,或者与having合用筛选,结果按照group by的字段排序 例:select ...

  3. RabbitMQ之Exchange Topics模式

    说明:此模式实在路由key模式的基础上,使用了通配符来管理消费者接收消息.生产者P发送消息到交换机X,type=topic,交换机根据绑定队列的routing key的值进行通配符匹配: 符号#:匹配 ...

  4. 7zip压缩程序的使用

    1.压缩: zip格式: 7zip.exe a -tzip C:\压缩解压测试\TEST.zip C:\压缩解压测试\TEST\* 7z格式: 7zip.exe a -t7z C:\压缩解压测试\TE ...

  5. cin.get(),cin.getline(),getline(),gets(),getchar()

    1.cin.get() (1).cin.get()-------提取单个字符,可以提取回车.空格 a=cin.get(); (2) 同(1)---------------提取单个字符,可以提取回车.空 ...

  6. 如何在MySQL中查询当前数据上一条和下一条的记录

    如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from tab ...

  7. php如何判断电脑访问还是手机访问?

    手机上网用户数量越来越大,如今各网站都推出了手机网站,电脑用户访问时直接访问电脑版网页,当用户通过手机访问网站时则跳自动跳转到手机版网页,下面给大家分享一段php中判断电脑访问还是手机访问的代码: & ...

  8. 我对java的理解(一)——注解就是贴标签

    在现实生活中,贴标签这种现象比比皆是.去超市,去商场,每个或者每类物品都会有它的标签,甚至在我们自己身上也会有标签,比如,程序猿.逗逼.单身狗.80/90后.屌丝……呵呵,太多了.有时候,我们也会戏谑 ...

  9. Java 实现 JS的eval函数

    JS的eval 函数, 给个表达式做参数, 返回表达式的值. Java的脚本引擎可以实现这个功能. 例子:   拼接一个字符串 \uxxxx, Unicode的十六进制编码, 然后把它打印出来. 即输 ...

  10. C++中的前置和后置++

    在C++中进行操作符重载的时候,前置++返回的是一个引用. 这就设计到了对于基本变量进行前置操作时候的理解了. 例如,对于int类型变量,在进行前置++的时候,是会将i进行加1,然后返回i的引用.而i ...