当前位置: 首页 > article >正文

C++之list的使用

在C++中,std::list 是一个双向链表,它允许在列表的任何位置高效地插入和删除元素。以下是一些基本的使用方式:

包含头文件

要使用 std::list,首先需要包含头文件 <iostream>/list>

#include <iostream>
#include <list>

创建 list

// 创建一个空的 list
std::list<int> lst;

// 使用初始化列表创建 list
std::list<int> lst = {1, 2, 3, 4, 5};

添加元素

// 在 list 末尾添加一个元素
lst.push_back(6);

// 在 list 开头添加一个元素
lst.push_front(0);

// 在特定位置添加一个元素
auto it = std::next(lst.begin(), 2); // 定位到第三个元素的位置
lst.insert(it, 7);

删除元素

// 删除特定位置的元素
it = std::next(lst.begin(), 2); // 定位到第三个元素的位置
lst.erase(it);

// 删除特定值的所有元素
lst.remove(7);

// 删除从 pos 到 pos + n 的元素
auto end = std::next(it, 3); // 从第三个元素开始,删除三个元素
lst.erase(it, end);

访问元素

std::list 不支持随机访问,因此不能使用下标访问元素。但可以使用迭代器访问元素。

// 使用迭代器访问元素
for (auto it = lst.begin(); it != lst.end(); ++it) {
    std::cout << *it << " ";
}

修改元素

// 使用迭代器修改元素
for (auto it = lst.begin(); it != lst.end(); ++it) {
    if (*it == 2) {
        *it = 20; // 修改值为 20
        break;
    }
}

遍历 list

// 使用范围基 for 循环
for (int value : lst) {
    std::cout << value << " ";
}

// 使用传统 for 循环
for (auto it = lst.begin(); it != lst.end(); ++it) {
    std::cout << *it << " ";
}

获取 list 信息

// 获取 list 的大小
size_t size = lst.size();

// 检查 list 是否为空
bool empty = lst.empty();

清空 list

lst.clear();

交换两个 list 的内容

std::list<int> lst2 = {7, 8, 9};
lst.swap(lst2);

合并两个 list

std::list<int> lst2 = {7, 8, 9};
lst.merge(lst2); // 合并两个有序 list,假设它们已经排序

排序 list

lst.sort(); // 排序 list,使用 operator< 进行比较

反转 list

lst.reverse();

std::list 提供了许多其他功能和操作,这些只是最基本的一些。正确使用 std::list 可以极大地提高程序的灵活性和效率,尤其是在需要频繁插入和删除操作的场景中。


http://www.kler.cn/a/382640.html

相关文章:

  • stm32疑难杂症之电压不够程序跑飞
  • Python并发编程——multiprocessing
  • C++练习题(2)
  • 手边酒店多商户版V2源码独立部署_博纳软云
  • Qt Creator 的F5、F10 和 F11 调试快捷键
  • 零基础Java第十三期:继承与多态(一)
  • 02- 模块化编程-006 ADC0808数码显示对比
  • python-读写Excel:openpyxl-(4)下拉选项设置
  • 24软件包的查找、安装、更新和卸载
  • 100种算法【Python版】第51篇——希尔排序
  • Excel怎么转换成word?分享两种方法!
  • 基于matlab的基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络预测
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十八章 Qt控制硬件
  • NLP论文速读|LOGO -- Long context aliGnment via efficient preference Optimization
  • ChatGPT任务设计和微调策略的优化
  • 泉州市工业和信息化局关于开展排查运维安全管理系统安全漏洞的通知
  • #JavaScript 宏任务与微任务详解
  • 2-146 基于matlab的双摆杆系统建模分析
  • Tomcat 启动卡住,日志显示 At least one JAR was scanned for TLDs yet contained no TLDs.
  • 【C语言】实战-力扣题库:回文链表
  • 【LeetCode】【算法】238. 除自身以外数组的乘积
  • Hadoop集群的高可用(HA)-(2、搭建resourcemanager的高可用)
  • dbt 数据分析工程实战教程(汇总篇)
  • Mill:比Maven快10倍的JVM构建工具
  • 如何理解美国总统Trump这个单词
  • 数据库SQL学习笔记