list 容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线 性表,这样,对链表的任一位置的元素进行插入、删除和查找都是极快速的。

图 2-7 是 list 采用的双向循环链表的结构示意图。

由于 list 对象的节点并不要求在一段连续的内存中,所以,对于迭代器,只能通过“++” 或“- -”的操作将迭代器移动到后继/前驱节点元素处。而不能对迭代器进行+n 或-n 的操 作,这点,是与 vector 等不同的地方

代码如下:

 #include<iostream>
#include<algorithm>
#include<list>
using namespace std;
int main(){
//创建空链表
list<int> l;
//创建具有n个元素的链表
list<int> l1();//创建具有10个元素的链表
//三种方法插入新的元素
//采用push_back()方法往尾部插入新元素,链表自动扩张。
//采用push_front()方法往首部插入新元素,链表自动扩张
//采用insert()方法往迭代器位置处插入新元素,链表自动扩张。
//迭代器只能“++”或“--”操作,不能进行+n或-n操作
//链表尾部插入新元素
l.push_back();
l.push_back();
l.push_back();
//链表头部插入新元素
l.push_front();
//在任意位置插入新元素
list<int>::iterator it;
it=l.begin();
it++;
l.insert(it,);
//使用前向迭代器遍历链表
list<int>::iterator it1;
for(it1=l.begin();it1!=l.end();it1++){
cout<<*it1<<" ";
}
cout<<endl;
//反向遍历用反向迭代器reverse_iterator
list<int>::reverse_iterator rit;
for(rit=l.rbegin();rit!=l.rend();rit++){
cout<<*rit<<" ";
}
cout<<endl;
//可以使用remove()方法删除链表中一个元素,值相同的元素都会被删除。
l.remove();
//使用pop_front()方法删除链表首元素,使用pop_back()方法删除表尾元素。
l.pop_front();
l.pop_back();
//使用erase()方法删除迭代器位置上的元素。
list<int>::iterator it2;
it2=l.begin();
it2++;
l.erase(it2);
//元素查找,返回迭代器的位置,没有找到,返回end()的位置
list<int>::iterator it3;
it3=find(l.begin(),l.end(),);
if(it3!=l.end()){
cout<<"find it"<<endl;
}
else
{
cout<<"not find it"<<endl;
}
//元素排序sort()
l.sort();
//剔除重复元素unique(),只保留一个
l.unique();
//清空链表,clear()
l.clear();
return ;
}

List双向链表容器的更多相关文章

  1. list双向链表容器(常用的方法总结)

    特别注意,由于list对象的结点并不要求在一段连续的内存中,所以,对于迭代器,只能通过++或者--的操作将迭代器移动到后继或者前驱结点元素处.而不能对迭代器进行+n或者-n的操作,这点与vector等 ...

  2. stl之list双向链表容器应用基础

    不同于採用线性表顺序存储结构的vector和deque容器.list双向链表中任一位置的元素差值.插入和删除,都具有高效的常数阶算法时间复杂度O(1). 头文件 #include<list> ...

  3. 2_STL容器

    STL算法的精髓在于  算法的  返回值!!! String: string是STL的字符串类型,通常用来表示字符串:C语言中一般用char* char*字符指针;string是类封装了char*,管 ...

  4. STL学习系列六:List容器

    List简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.it++(ok), it+5(err) #include ...

  5. nginx学习六 高级数据结构之双向链表ngx_queue_t

    1 ngx_queue_t简单介绍 ngx_queue_t是nginx提供的一个轻量级的双向链表容器,它不负责存储数据,既不提供数据的内存分配.它仅仅有两个指针负责把数据链入链表.它跟stl提供的qu ...

  6. STL - list(双向链表)

    List简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err) #include & ...

  7. 05--STL序列容器(List)

    一:List双向链表简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err)list不 ...

  8. STL之List容器

    1.List容器 1) list是一个双向链表容器,可高效地进行插入删除元素. 2)list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err) 3)头 ...

  9. STL常用容器使用方法

    在程序头部使用#include<stack>来引入STL的stack容器,然后使用stack<int> s语句来声明一个管理整型数据的容器s.stack常用成员函数:push( ...

随机推荐

  1. oracle一些单记录函数

    单记录函数 1.0 NVL() 作用:从两个表达式返回一个非NULL值 用法:NVL(表达式1, 表达式2) 如果表达式1的结果不为NULL,返回表达式1的结果:如果表达式1的结果为NULL,返回表达 ...

  2. [转帖]你所不知道的C和C++运行库

    [C-C++]你所不知道的C和C++运行库 https://blog.csdn.net/humanking7/article/details/85887884 原作者也是转的blog 最近一个物理机上 ...

  3. day 7-6 多线程及开启方式

    一. 什么是线程 线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程 ...

  4. j收集ava面试题

    史上最全Java面试题(带全部答案) https://blog.csdn.net/linzhiqiang0316/article/details/80473906

  5. PHP5.4.0新特性研究

    PHP5.4.0新特性研究 1.内建Web Server 这的确是个好的改进,大大的方便了开发人员.以后开发机不装nginx,httpd也行 cd $PHP_INSTALL_PATH ./bin/ph ...

  6. Golang的方法传递值应该注意的地方

    其实最近看了不少Golang接口以及方法的阐述都有一个地方没说得特别明白.就是在Golang编译隐式转换传递给方法使用的时候,和调用函数时的区别. 我们都知道,在我们为一个类型变量申明了一个方法的时候 ...

  7. $mount(“#app”)手动挂载

    没有el属性时,证明vue还没绑定到特定的dom上,需要延迟加载,则使用.$mount("")进行手动挂载 https://blog.csdn.net/longzhoufeng/a ...

  8. 在Linq to sql 和 Entity framework 中使用lambda表达式实现left join

    在Linq to sql 和 Entity framework 中使用lambda表达式实现left join 我们知道lambda表达式在Linq to sql 和 Entity framework ...

  9. Spring Boot 构建电商基础秒杀项目 (二) 使用 Spring MVC 方式获取用户信息

    SpringBoot构建电商基础秒杀项目 学习笔记 修改 DOMapper 在 UserPasswordDOMapper.xml 添加: <select id="selectByUse ...

  10. Microsoft Azure Tutorial: Build your first movie inventory web app with just a few lines of code

    Editor’s Note: The following is a guest post from Mustafa Mahmutović, a Microsoft Student Partner wh ...