技术在于交流、沟通,本文为博主原创文章转载请注明出处并保持作品的完整性。

list 表示非连续的内存区域,并通过一对指向首尾元素的指针双向链接起来,从而允许向前和向后两个方向进行遍历.在list 的任意位置插入和删除元素的效率都很高.

它的结构

一 定义

头文件 #include <vector>

#include <iostream>
#include <list>
using namespace std; int main(int argc, const char * argv[]) { //a.定义 list<typeName> name;
list<int> l; //b.拷贝构造
list<int> l1(l); //c.拷贝赋值
l1 = l; //d.按指定元素个数定义 含五个默认值是0的元素的链表
list<int> l2(); //e.指定元素个数及类型 含有5个值为2的链表
list<int> l3(,); //f.指定赋值区域
list<int> l4(l1.begin(),l1.end()); return ;
}

二 基本使用

int main_1()
{
list<int> l; //返回指向第一个元素的迭代器
l.begin(); //返回指向最后一个元素的下一个位置的迭代器
l.end(); int num = ;
//在末尾增加一个元素。
l.push_back(num); //删除末尾的元素。
l.pop_back(); //在起始端增加元素
l.push_front(num); //删除第一个元素。
l.pop_front(); //返回第一个元素
l.front(); //返回最后一个元素
l.back(); //判断是否为空
l.empty(); //返回元素个数
l.size(); //返回list最大容量
l.max_size(); //清空list
l.clear(); //在指定位置插入元素
l.insert(l.begin(),num); //在指定位置插入5个元素
l.insert(l.begin(),,num); //在指定位置插入区间
l.insert(l.begin(),l.begin(),l.end()); //返回逆向链表的第一个元素,即l链表的最后一个数据。
l.rbegin(); //返回逆向链表的最后一个元素的下一个位置,即l链表的第一个数据再往前的位置。
l.rend(); //将5个num拷贝赋值给链表
l.assign(,num); //将指定区间的元素拷贝赋值给链表
l.assign(l.begin(),l.end()); //删除指定下标位置的元素。
l.erase(l.begin()); //从新定义链表的长度,超出原始长度部分用0代替,小于原始部分删除。
l.resize(); //从新定义链表的长度,超出原始长度部分用num代替。
l.resize(,num) ; list<int> l1; //将l1和l交换。
l1.swap(l); //将l1和l交换。
swap(l1,l); //删除相同元素
l.unique(); //删除链表中匹配num的元素
l.remove(num); //反转链表
l.reverse(); //将链表排序,默认升序
l.sort(); //自定义回调函数实现自定义排序
auto func_sort =[] {
std::cout<< "自定义排序方式" <<std::endl;
};
l.sort(func_sort); auto func_remove_if = [](int n){ return n<;
};
//删除条件满足的元素,参数为自定义的回调函数
l.remove_if(func_remove_if); //合并2个有序的链表并使之有序,从新放到l里,释放l1
l.merge(l1); //合并2个有序的链表并使之按照自定义规则排序之后从新放到l中,释放l1
l.merge(l1,func_sort); //将l1连接在l的beg位置,释放l1
l.splice(l.begin(),l1); //将l1的beg位置的元素连接到l的beg位置,并且在l1中施放掉beg位置的元素
l.splice(l.begin(),l1,l1.begin()); //将l1的[beg,end)位置的元素连接到l的beg位置并且释放l1的[beg,end)位置的元素
l.splice(l.begin(),l1,l1.begin(),l1.end()); return ;
}

三 list支持的算法

从上文你可以看出来, 我没有引用算法头文件,但是依然能使用算法. 如

l.sort();

是因为容器与算法之间的联系是通过迭代器,而标准库中的算法的实现方式很多都是循序查找,即随机查找.随机查找的操作是需要在迭代器上,然而list容器的内存不连续,所以list的迭代器所指向的内存也不连续.所以标准库自带的排序算法不适用.

list 表示非连续的内存区域,并通过一对指向首尾元素的指针双向链接起来,从而允许向前和向后两个方向进行遍历。在list 的任意位置插入和删除元素的效率都很高。

指针必须被重新赋值,但是,不需要用拷贝元素来实现移动。另一方面,它对随机访问的支持并不好。访问一个元素需要遍历中间的元素,另外每个元素还有两个指针的额外空间开销。

STL标准库-容器-list的更多相关文章

  1. STL标准库-容器-set与map

    STL标准库-容器-set与multiset C++的set https://www.cnblogs.com/LearningTheLoad/p/7456024.html STL标准库-容器-map和 ...

  2. STL标准库-容器-set与multiset

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. set与multiset关联容器 结构如下 set是一种关联容器,key即value,value即key.它是自动排序,排序特点依据key se ...

  3. STL标准库-容器-deque

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. deque双向开口可进可出的容器 我们知道连续内存的容器不能随意扩充,因为这样容易扩充别人那去 deque却可以,它创造了内存 ...

  4. STL标准库-容器-vector

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. 向量容器vector是一个动态数组,内存连续,它是动态分配内存,且每次扩张的原来的二倍. 他的结构如下 一 定义 vector ...

  5. STL标准库-容器适配器

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 上一节介绍了仿函数适配器,这节主要介绍容器适配器和迭代器适配器的概念,其实容器适配器和迭代器其适配器就是封装了一些其他class ...

  6. STL标准库-容器-rb_tree

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 红黑树,关联式容器底层实现(map set),在使用中基本运用不到,但是还是想了解一下他的运作方式 Red_Black tree ...

  7. STL标准库-容器-unordered_set

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 unordered_set与与unordered_map相似,这次主要介绍unordered_set unordered_set ...

  8. STL标准库-容器-map和multimap

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 map与multimap为关联容器,结构如下 map底层实现依然是rb_tree 他的data可以改,但是key不能改,因此ma ...

  9. STL标准库-容器-deque 双端队列

    头文件: #include<deque> 常用操作: https://www.cnblogs.com/LearningTheLoad/p/7450948.html

随机推荐

  1. mac 安装homobrew 报错解决

    按照官网(https://brew.sh/index_zh-cn.html)给的命令:     /usr/bin/ruby -e "$(curl -fsSL https://raw.gith ...

  2. Flask系列(六)Flask实例化补充及信号

    一.实例化补充 instance_path和instance_relative_config是配合来用的. 这两个参数是用来找配置文件的,当用app.config.from_pyfile('setti ...

  3. 命令行下开启与关闭windows防火墙关端口(转)

    sc config sharedaccess start= auto //设置防火墙服务为自动 net start sharedaccess //开启防火墙服务 关闭端口 netsh firewall ...

  4. Visual Studio Code常用设置

    Visual Studio Code常用设置 • 自动保存设置 ▶ 文件(F) -> 首选项(P) -> 用户设置(U) ▶ 将"files.autoSave": &q ...

  5. 图:无向图(Graph)基本方法及Dijkstra算法的实现 [Python]

    一般来讲,实现图的过程中需要有两个自定义的类进行支撑:顶点(Vertex)类,和图(Graph)类.按照这一架构,Vertex类至少需要包含名称(或者某个代号.数据)和邻接顶点两个参数,前者作为顶点的 ...

  6. Uva11374 Dijkstra

    机场快线是市民从市内去机场的首选交通工具.机场快线分为经济线和商业线两种,线路.速度和价格都不同,你有一张商业线车票,可以坐一站商业线,而其他时候,只能乘坐经济线.假设换乘时间忽略不计,你的任务是找一 ...

  7. oracle中 start with .. connect by prior.. 用法简介

    我们经常会将一个比较复杂的目录树存储到一个表中.或者将一些部门存储到一个表中,而这些部门互相有隶属关系.这个时候你就会用到connect by prior start with.oracle 提供了s ...

  8. 用通俗的语言解释restful

    实现了REST规范的Web API就叫RESTful API. 简单来说:就是用url定位资源,用http描述来操作资源. web是什么:分布式信息系统为超文本文件和其他对象(资源)提供访问入口. 资 ...

  9. 20155201 实验三《Java面向对象程序设计》实验报告

    20155201 实验三<Java面向对象程序设计>实验报告 一.实验内容 XP基础 XP核心实践 相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门 ...

  10. 20145221 《Java程序设计》第三周学习总结

    20145221 <Java程序设计>第三周学习总结 教材学习内容总结 第四章部分已在假期完成,详见博客: <Java程序设计>第四章-认识对象 第五章部分 何谓封装 封装实际 ...