首页 > 其他分享 >2023.12.5 stl list容器

2023.12.5 stl list容器

时间:2023-12-05 22:44:26浏览次数:35  
标签:printList stl 2023.12 list back 链表 L1 push

3.7.1 list基本概念

 

功能:将数据进行链式存储

链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的

 

链表的组成:链表由一系列结点组成

 

结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域

 

STL中的链表是一个双向循环链表

 

 

由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器

 

list的优点:

  • 采用动态存储分配,不会造成内存浪费和溢出

  • 链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素

list的缺点:

  • 链表灵活,但是空间(指针域) 和 时间(遍历)额外耗费较大

 

List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。

 

总结:STL中List和vector是两个最常被使用的容器,各有优缺点

 

 

3.7.2 list构造函数

功能描述:

  • 创建list容器

 

函数原型:

  • list<T> lst; //list采用采用模板类实现,对象的默认构造形式:

  • list(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身。

  • list(n,elem); //构造函数将n个elem拷贝给本身。

  • list(const list &lst); //拷贝构造函数。

 

 

示例:

#include <list>

void printList(const list<int>& L) {

for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) {
cout << *it << " ";
}
cout << endl;
}

void test01()
{
list<int>L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);

printList(L1);

list<int>L2(L1.begin(),L1.end());
printList(L2);

list<int>L3(L2);
printList(L3);

list<int>L4(10, 1000);
printList(L4);
}

int main() {

test01();

system("pause");

return 0;
}

总结:list构造方式同其他几个STL常用容器,熟练掌握即可

 

 

 

 

 

 

3.7.3 list 赋值和交换

功能描述:

  • 给list容器进行赋值,以及交换list容器

函数原型:

  • assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身。

  • assign(n, elem); //将n个elem拷贝赋值给本身。

  • list& operator=(const list &lst); //重载等号操作符

  • swap(lst); //将lst与本身的元素互换。

 

示例:

#include <list>

void printList(const list<int>& L) {

for (list<int>::const_iterator it = L.begin(); it != L.end(); it++) {
cout << *it << " ";
}
cout << endl;
}

//赋值和交换
void test01()
{
list<int>L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
printList(L1);

//赋值
list<int>L2;
L2 = L1;
printList(L2);

list<int>L3;
L3.assign(L2.begin(), L2.end());
printList(L3);

list<int>L4;
L4.assign(10, 100);
printList(L4);

}

//交换
void test02()
{

list<int>L1;
L1.push_back(10);
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);

list<int>L2;
L2.assign(10, 100);

cout << "交换前: " << endl;
printList(L1);
printList(L2);

cout << endl;

L1.swap(L2);

cout << "交换后: " << endl;
printList(L1);
printList(L2);

}

int main() {

//test01();

test02();

system("pause");

return 0;
}

总结:list赋值和交换操作能够灵活运用即可

 

标签:printList,stl,2023.12,list,back,链表,L1,push
From: https://www.cnblogs.com/muzhaodi/p/17878498.html

相关文章

  • 2023.12.5——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.jfinal明日计划:学习......
  • 2023.12.5日报
    今天继续开发了ERP系统由于我做的是财务部分,分收入支出和工资管理三部分在收入部分我主要制作了对账功能,即,根据支票信息和收付款信息,通过多表联查的方式,显示出所有订单的支付情况这个在前两天已经进行了实现在支出部分,除了供应商的维护账单的管理,主要是做了报销的流程首先是......
  • centos 8 Failed to download metadata for repo ‘AppStream’: Cannot prepare inte
     查询后发现问题的原因是Centos8于2021年年底停止了服务,我们在使用yum源安装时候,出现下面错误“错误:Failedtodownloadmetadataforrepo‘AppStream’:Cannotprepareinternalmirrorlist:NoURLsinmirrorlist”。解决办法:1. 进入yum的repos目录:  cd/etc/yum.r......
  • Tekton Trigger EventListener 基础
    EventListener概述EventListener是一个Kubernetes对象,用于侦听Kubernetes集群上指定端口上的事件。它公开了一个可寻址接收器,用于接收传入事件并指定一个或多个Triggers。sink是一个Kubernetes服务,在专用Pod内运行sink逻辑。每个Trigger又允许您指定一个或多个Trigge......
  • 深度解析C#中LinkedList<T>的存储结构
    本文承接前面的3篇有关C#的数据结构分析的文章,对于C#有关数据结构分析还有一篇就要暂时结束了,这个系列主要从Array、List、Dictionary、LinkedList、 SortedSet等5中不同类型进行介绍和分析。废话不多说,接下来我们来最后看一下这个系列的最后一种数据类型"链表"。提到链......
  • Solution Set 2023.12.5
    [AHOI2009]最小割首先考虑如何处理可行边,对于边\(\left(u,v\right)\),其为可行边与同时满足下列两个条件互为充要条件:\(c_f(u,v)=0\)在\(G_f\)中不存在路径\(u\rightarrowv\)首先可以发现若存在\(G_f\)使得\(c_f(u,v)>0\),那么一定不会割这条边。若\(G_f\)......
  • 基于ACL (Access Control List)实现权限控制
    ACL是直接给用户分配权限:比如用户1有权限A、B、C,用户二有权限A,用户3有权限A、B。 这种记录每个用户有什么权限的方式,叫做访问控制表(AccesscontrolList);用户和权限是多对多的关系,存储这种关系需要用户表、角色表、用户-角色的中间表。我们来实践一下:在数据库中创建a......
  • Windows 项目的 CMakeLists 编写
    前言:项目一直是以.sln解决方案打开和处理的,上传到github也是需要将sln文件包括到项目里,不太优雅(虽然方便),毕竟现在开源项目基本都是使用CMake做跨平台编译因为项目是以Windows编译为主,就只写了CMakeLists中的Windows的部分,后续如果要跨平台的话,可以在此基础上拓展......
  • 云原生周刊:K8s 的 YAML 技巧 | 2023.12.4
    开源项目推荐HelmfileHelmfile是用于部署HelmChart的声明性规范。其功能有:保留图表值文件的目录并维护版本控制中的更改。将CI/CD应用于配置更改。定期同步以避免环境偏差。Docketeer一款Docker和Kubernetes开发人员工具,用于管理容器并可视化集群和容器指标。......
  • 2023.12.4学习笔记(stm32跑马灯实验——库函数)
     STM32f4有七组引脚(GPIOx),每组引脚有16个IO口,每组由十个寄存器控制。   查找STM32引脚的功能,可以在STM32F04ZGT6文件50页左右查询,此文件所在的位置为硬件资料、芯片资料文件夹里。跑马灯实验思路步骤:1:使能时钟,调用函数RCC_AHB1PeriphClockCmd();       ......