C++初阶:容器(Containers)list常用接口详解

2024-02-13 12:04

本文主要是介绍C++初阶:容器(Containers)list常用接口详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍完了vector类的相关内容后,接下来进入新的篇章,容器list介绍:


文章目录

  • 1.list的初步介绍
  • 2.list的定义(constructor)
  • 3.list迭代器( iterator )
  • 4.string的三种遍历
    • 4.1迭代器
    • 4.2范围for循环
  • 5. list capacity
  • 6.list element access
  • 7.list modifiers


1.list的初步介绍

请添加图片描述

  1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。
  2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。
  3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。
  4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。
  5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这可能是一个重要的因素)

请添加图片描述


2.list的定义(constructor)

请添加图片描述

构造函数描述
list(size_type n, const value_type& val = value_type())构造一个包含 n 个元素的列表,每个元素初始化为 val
list()构造一个空列表。
list(const list& x)拷贝构造函数。构造一个包含 x 中每个元素副本的列表。
list(InputIterator first, InputIterator last)用区间 [first, last) 中的元素构造一个列表。
#include<iostream>
#include<list>
using namespace std;void test1()
{list<int> lt1;//空参list<int> lt2(10, 2);//放进去10个二string s("abc");list<int> lt3(s.begin(), s.end());//利用迭代器初始化
}int main()
{test1();return 0;
}

3.list迭代器( iterator )

请添加图片描述

迭代器说明
begin获取第一个数据位置的iterator/const_iterator
end获取最后一个数据的下一个位置的iterator/const_iterator
rbegin获取最后一个数据位置的reverse_iterator
rend获取第一个数据前一个位置的reverse_iterator

4.string的三种遍历

4.1迭代器

void test2()
{string s("abc");list<int> lt(s.begin(), s.end());list<int>::iterator it = lt.begin();while (it != lt.end()){cout << *it << " ";it++;}cout << endl;}int main()
{test2();return 0;
}

请添加图片描述

4.2范围for循环

void test3()
{string s("abc");list<int> lt(s.begin(), s.end());for (auto e : lt){cout << e << " ";}cout << endl;
}int main()
{test3();return 0;
}

5. list capacity

请添加图片描述

函数描述
empty检测列表是否为空。如果为空返回 true,否则返回 false。
size返回列表中元素的个数。

6.list element access

请添加图片描述

函数描述
front返回list的第一个元素的引用。
back返回list的最后一个元素的引用。

7.list modifiers

请添加图片描述

函数接口说明
push_front在list首元素前插入值为val的元素。
pop_front删除list中第一个元素。
push_back在list尾部插入值为val的元素。
pop_back删除list中最后一个元素。
insert在list position 位置中插入值为val的元素。
erase删除list position位置的元素。
swap交换两个list中的元素。
clear清空list中的有效元素。
void test4()
{list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);//尾插三个for (auto e : lt){cout << e << " ";}cout << endl;lt.pop_back();//尾删一个for (auto e : lt){cout << e << " ";}cout << endl;lt.push_front(1);//头插一个for (auto e : lt){cout << e << " ";}cout << endl;lt.pop_front();//头删一个for (auto e : lt){cout << e << " ";}cout << endl;lt.clear();//全删for (auto e : lt){cout << e << " ";}cout << endl;
}int main()
{test4();return 0;
}

请添加图片描述


这次内容到这里啦,下一次给大家带来模拟,感谢大家支持!!!

这篇关于C++初阶:容器(Containers)list常用接口详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705478

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2