【STL_ LIST】 STL | LIST 双向链表 |常用操作_stl 双向链表-程序员宅基地

技术标签: c++  链表  list  

一, STL大纲

首先我们知道 STL 的设置的初衷,当我们程序猿在实现一些程序的时候,我们可能会重复的使用到一些数据结构,还有算法,我们所要说的stl就是被使用很多次的数据结构,我们把他分装到STL中,然后调用,这会使我们能更方便的来完成数据结构的实现,以及程序的设计

常见的STL容器有:

LIST 双链表 , VECTOR 动态数组 ,QUEUE 队列 ,STACK 栈。。。

二,LIST 双链表容器

1, 数据结构的存储结构

双链表容器,存储的方式就是类似双链表的存储,使用的时候就把这个链表结构当成常用的链表使用就行,
在这里插入图片描述

2,lIst 的使用

1,链表的创建

创建一个空表 : list <数据结构> 变量名称
创建一个常数链表 :list <> name( 几个 ,常数值) ;
创建一个导其他类型的数据结构

链表: list <> na (na2)
其他使用迭代器导入

//数组迭代器
#include <iostream>
#include <list>
using namespace std ;
int main () 
{
     int q[10] = {
    1,2,3,45,6,7,8,9,3} ;
    list <int> sq(q , q + 10) ; 
    
   
    for(int   e  : sq)
    {
    
         cout << e << endl ; 
    } 
    return 0 ;
}

2,链表的压入,删除基础操作
∗ ∗ 链表的压入 ∗ ∗ **链表的压入** 链表的压入
头压入 : name.push_front()
尾压入 : name.push_back()

#include <iostream>
#include <list>
using namespace std ;
int main () 
{
     int q[10] = {
    1,2,3,45,6,7,8,9,3} ;
    list <int> sq(q , q + 10) ; 
    
	sq.push_back(1314);//back
	
	sq.push_front( 34);
  //front  
    for(int   e  : sq)
    {
    
         cout << e << endl ; 
    } 
    return 0 ;
}

∗ ∗ 链表的弹出 ∗ ∗ **链表的弹出** 链表的弹出
头弹出 : pop_front ()
尾弹出 : pop_back ()

#include <iostream>
#include <list>
using namespace std ;
int main () 
{
     int q[10] = {
    1,2,3,45,6,7,8,9,3, 34} ;
    list <int> sq(q , q + 10) ; 
    
	sq.push_back(1314);
	sq.push_front( 34);
	
	sq.pop_back() ;
	sq.pop_front() ;
	sq.pop_back() ;
    for(int   e  : sq)
    {
    
         cout << e << endl ; 
    } 
    return 0 ;
}

剩下的操作都需要一个迭代器的操作,接下我们i先补习一下迭代器的操作。

迭代器:
针对list 链表迭代器的实现
常见的 c.begin() ,c.end() 一个头节点,一个尾结点
——————————————————————————————————————
中间迭代器的查找操作 :
使用迭代器遍历存储 list < > :: iterator
寻找地址: 使用ffind 函数 ( 前结点, 后结点 ,值)

∗ ∗ 链表的插入 ∗ ∗ **链表的插入** 链表的插入

#include <iostream>
#include <list>
#include <bits/stdc++.h>
using namespace std ;
int main () 
{
     int q[10] = {
    1,2,3,45,6,7,8,9,3, 34} ;
   list <int> sq(q , q + 10) ; 
   
   sq.push_back(1314);
   sq.push_front( 34);
   
   sq.pop_back() ;
   sq.pop_front() ;
   sq.pop_back() ;
   list<int> :: iterator pos  = find(sq.begin() , sq.end() , 2) ; 
   //指针的存储  iterator  
	sq.insert(pos, 2324) ;
	//压入操作 
   for(int   e  : sq)
   {
    
        cout << e << endl ; 
   } 
   return 0 ;
}

∗ ∗ 链表的删除 ∗ ∗ **链表的删除** 链表的删除

#include <iostream>
#include <list>
#include <bits/stdc++.h>
using namespace std ;
int main () 
{
     int q[10] = {
    1,2,3,45,6,7,8,9,3, 34} ;
    list <int> sq(q , q + 10) ; 
    
	sq.push_back(1314);
	sq.push_front( 34);
	
	sq.pop_back() ;
	sq.pop_front() ;
	sq.pop_back() ;
	list<int> :: iterator pos  = find(sq.begin() , sq.end() , 2) ; 
 	sq.insert(pos, 2324) ;
 	sq.erase(pos) ;
    for(int   e  : sq)
    {
    
         cout << e << endl ; 
    } 
    return 0 ;
}

扩展
STL迭代器的一些想法和理解 首先来说迭代器是这个值的内存地址,在数据结构中我们锁定的就是这个结点,不是这个结点所在的位置 。

∗ ∗ 链表数据的获取 ∗ ∗ **链表数据的获取** 链表数据的获取
首先获取数据的时候,头部的获取:front() 尾部的获取 back()
在这里插入图片描述

3,常用的经典操作

链表的大小
cout << sq.size() << endl ; 

在这里插入图片描述

和sort() 函数的使用
lt.sort() 

在这里插入图片描述

删除指定元素 remove()
lt.remove() 

在这里插入图片描述

3,链表的遍历

#include <iostream>
#include <list>
using namespace std ;
int main () 
{
    
    int q[10] = {
     32,34,3,534,5,4,65,4,65,6} ; 
    list <int> li(q, q +  9) ; 
    for( auto  e : li)
        cout << e << endl ;
    return 0 ;
}

这种遍历方式是几个数据结构特有的

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wen030803/article/details/131959098

智能推荐

Flutter原理:三棵重要的树(渲染过程、布局约束,flutterlistview原理复用_flutter focus原理-程序员宅基地

文章浏览阅读2.7k次。每次,当控件挂载到控件树上时,Flutter 调用其 createElement() 方法,创建其对应的 Element。Flutter 再将这个 Element 放到元素树上,并持有创建它控件的引用,如下图:控件会有它的子树:子控件也会创建相应 Element 被放在元素树上:4Element 中的状态我们上文提到了 Widget 的不可变性,相应的 Element 就有其可变性,正如我们前文所说的它被标记为 dirty Element 便是作为需要更新的状态,另外一个我们需要格外注意的是,_flutter focus原理

zepto.js选择器_zepto.js 属性选择-程序员宅基地

文章浏览阅读2.1k次。1.$是一个函数构造器_zepto.js 属性选择

tornado 异步执行shell命令并返回执行结果_486cpu tornado shell命令-程序员宅基地

文章浏览阅读1k次。思路:通过tornado框架构建web服务器,通过执行后台命令程序获取监控目标状态或监控结果,根据状态或结果,通过websocket发送信息到前端进行相应的展现。问题:tornadoweb框架是异步处理的,其核心是将事务都放入到ioloop异步循环中。但通常使用python调用shell脚本或者执行的shell命令,以及python打开文件的操作都是同步阻塞模式,无法加入到ioloop中。在下面的连接中提到了如何将shell命令通过异步方式执行并获取执行结果。https://www.cn..._486cpu tornado shell命令

设计类似于抖音、小红书、微博等方式的主题点赞与评论的数据库表_小红书 评论 表结构-程序员宅基地

文章浏览阅读2.8k次。转载请注明Garcia主题设计: 主题ID、用户ID、主题标题、主题城市、主题位置名称、主题位置详细地址、地理经度、地理纬度、 主题展示内容(100)、主题展示媒体文件路径(List图片名称)、点赞数、评论数、收藏数,转发数、 是否为转发主题、被转发主题ID、被转发主题发行人ID、被转发主题发行人名称、创建时间、更新时间主题内容设计: 主题ID,主题完整内容主题点赞表: 主题ID、用户ID、状态(1有效,0取消)主题主评论表(根据点赞数排序)..._小红书 评论 表结构

牛客练习赛76_牛客练习赛76b-程序员宅基地

文章浏览阅读141次。牛客练习赛76B zzugzx (vs) Kurisu是一个博弈游戏注意到(m+1)^n<=5000那么我们是可以直接考虑爆搜的总共N个回合,那么两个人就是2*N次操作定义f[a][b]代表当 ,zzugzx 选了a的数,Kurisu选了b的数,zzugzx赢的概率a和b分别是n位m+1进制的数,代表n回合他抽到1-m的数放在1~n哪个位置#include<bits/stdc++.h>using namespace std;int ok[5000][5000];dou_牛客练习赛76b

物联网IOT选型wifi路由模块串口透传不得不知的秘密_wifi透传与iot-程序员宅基地

文章浏览阅读1.2k次。2020年一场突如其来的疫情灾难袭来,各大经济市场在不同程度被按下了“暂停键”。物联网控制作为新兴行业优势凸显出来,其无接触式的交互方式,远程控制,智能控制车间,给疫情期间的人民带来安全、智能的生活体验。这些物联网控制大多用到了网关信息桥梁来传输—wifi 路由模块。但你知道吗?工程师们想要选择高性价比的wifi路由模块做串口透传,不得不知道wifi路由模块的两大区分:mcu+wifi模块和C..._wifi透传与iot

随便推点

异构计算 — CPU+GPU_异构计算 cpu gpu-程序员宅基地

文章浏览阅读5.9k次。目录文章目录目录CPU-GPU 异构计算系统分离式架构CPU-GPU 异构计算系统在现代的异构计算系统中,GPU 是以 PCIe 卡的形式作为 CPU 的辅助计算设备。根据 CPU 和 GPU 是否共享了内存,可分为两种类型的 CPU-GPU 异构计算架构:分离式架构:CPU 和 GPU 拥有各自独立的缓存和内存,两者之间通过 PCIe 总线通信。目前主要做计算机、智能手机中使用。耦合式架构:CPU 和 GPU 共享内存和缓存。AMD 的 APU 采用的就是这种结构,目前主要使用在游戏主机中。_异构计算 cpu gpu

小米10pro卡刷教程 卡刷升级官方系统方法_小米10如何刷澎湃系统-程序员宅基地

文章浏览阅读1.3w次。来源:智能手机网小米10pro卡刷升级官方系统图文步骤1、确保手机电量充足,己经下载好了官方卡刷包,还没有下载的请下载小米10pro官方完整卡刷包。2、将手机连接电脑,打开存储模式,将下载后的zip格式的压缩包不要解压,直接拷贝至内置存储 /downloaded_rom 文件夹下,或仅包含"英文或数字"路径的文件夹下。3、然后进入小米10pro手机中“设置-我的设备,如下图所示:..._小米10如何刷澎湃系统

浅析J2EE,J2SE,J2ME_简述j2se.j2ee和j2me的特点及使用方向-程序员宅基地

文章浏览阅读1k次。J2EE,J2SE,J2ME三者有什么不同?J2EE,J2SE,J2ME是Sun 公司的Java多个版本,就像Windows XP还有专业版和家庭版是一样的。J2EE:Java 2 Platform Enterprise Edition 企业版,用于企业应用,支持分布式部署。J2SE:Java 2 Platform Standard Edition 标准版,用于桌面应用,也是J2EE的_简述j2se.j2ee和j2me的特点及使用方向

clickhouse SummingMergeTree表引擎-程序员宅基地

文章浏览阅读1.3k次。该引擎继承了MergeTree引擎,当合并 SummingMergeTree 表的数据片段时,ClickHouse 会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值,即如果存在重复的数据,会对对这些重复的数据进行合并成一条数据,类似于group by的效果。推荐将该引擎和 MergeTree 一起使用。例如,将完整的数据存储在 MergeTree 表中,并且使用 SummingMergeTree 来存储聚合数据。这种方法可以避免因为使用不正确的主键组合方式而丢失数据。_clickhouse summingmergetree

CUDA c programming guide_cude c program model-程序员宅基地

文章浏览阅读3.1k次。http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#axzz4FIp5fBgMCUDA C Programming GuideChanges from Version 7.0Updated C/C++ Language Support to:Added new_cude c program model

Redis(十八)-Redis的数据结构之整数集合_redis int64 9.2233720368548e+18-程序员宅基地

文章浏览阅读2.4k次。本文简单介绍了整数集合这种数据结构,整数集合是集合键的底层实现之一,是专门用来存储整数的,整数集合的底层实现是数组,这个数组以有序,无重复的方式保存集合元素,在有需要时,程序为会根据新添加元素的类型,改变这个数组的类型,升级操作为整数集合带来了操作上的灵活性,并且尽可能节约了内存。_redis int64 9.2233720368548e+18

推荐文章

热门文章

相关标签