C++学习,容器类 <list>

embedded/2024/10/18 13:08:29/

C++ 标准库 <list> 是一个非常重要的容器类,用于存储元素集合,支持双向迭代器。<list>允许在容器的任意位置快速插入和删除元素。与数组或向量(<vector>)不同,<list> 不需要在创建时指定大小,并且可以在任何位置添加或删除元素,而不需要重新分配内存。

std::list与 std::vector 不同,std::list 元素在内存中不是连续存储的,而是分散存储,并通过指针链接在一起。这种结构使得 std::list 在插入和删除元素时非常高效,特别是在容器的中间位置。

基本操作:
包含头文件:#include <list>
声明列表:std::list<T> mylist;,其中 T 是存储在列表中的元素类型。
插入元素:mylist.push_back(value);
删除元素:mylist.pop_back(); 或 mylist.erase(iterator);
访问元素:mylist.front(); 和 mylist.back();
遍历列表:使用迭代器 for (auto it = mylist.begin(); it != mylist.end(); ++it)

基本特点:
双向迭代:<list> 提供了双向迭代器,可以向前和向后遍历元素。
非连续存储:由于元素是通过指针链接的,因此它们在内存中不需要连续存储。
快速插入和删除:可以在列表的任何位置快速插入或删除元素,不需要像向量移动大量元素。

示例代码:

#include <iostream>  
#include <list>    
int main() {  
    std::list<int> lst;  
  
    // 添加元素  
    lst.push_back(10);  
    lst.push_front(5);  
    lst.insert(lst.begin(), 20); // 在开头和第一个元素之间插入 20  
  
    // 遍历元素  
    for (std::list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {  
        std::cout << *it << " ";  
    }  
    std::cout << std::endl;  
  
    // 删除元素  
    lst.pop_back(); // 删除最后一个元素  
    lst.erase(lst.begin()); // 删除第一个元素  
  
    // 再次遍历元素  
    for (std::list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {  
        std::cout << *it << " ";  
    }  
    std::cout << std::endl;  
  
    // 排序  
    lst.push_back(3);  
    lst.push_back(1);  
    lst.sort(); // 对 list 进行排序  
  
    // 输出排序后的元素  
    for (std::list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {  
        std::cout << *it << " ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}

 


http://www.ppmy.cn/embedded/127750.html

相关文章

安卓14无法安装应用解决历程

客户手机基本情况&#xff1a; 安卓14&#xff0c;对应的 targetSdkVersion 34 前天遇到了安卓14适配问题&#xff0c;客户发来的截图是这样的 描述&#xff1a;无法安装我们公司的B应用。 型号&#xff1a;三星google美版 解决步骤&#xff1a; 1、寻找其他安卓14手机测试…

CMake变量:CMAKE_FIND_LIBRARY_SUFFIXES

CMAKE_FIND_LIBRARY_SUFFIXES是CMake中的一个变量&#xff0c;用于指定在查找库文件时使用的后缀列表。当CMake需要找到库文件时&#xff0c;它会尝试在这些后缀后添加库名来构建库文件的完整路径。例如&#xff0c;如果库名为mylib&#xff0c;并且CMAKE_FIND_LIBRARY_SUFFIXE…

【C++网络编程】(一)Linux平台下TCP客户/服务端程序

文章目录 Linux平台下TCP客户/服务端程序服务端客户端相关头文件介绍 Linux平台下TCP客户/服务端程序 图片来源&#xff1a;https://subingwen.cn/linux/socket/ 下面实现一个Linux平台下TCP客户/服务端程序&#xff1a;客户端向服务器发送&#xff1a;“你好&#xff0c;服务…

Unity 2d UI 实时跟随场景3d物体

2d UI 实时跟随场景3d物体位置&#xff0c;显示 3d 物体头顶信息&#xff0c;看起来像是场景中的3dUI&#xff0c;实质是2d UIusing System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using UnityEngine.UI; /// <summary>…

matlab怎样将数据按行拼接和按列拼接(水平拼接竖直拼接)

1-将两个矩阵水平拼接 在 MATLAB 中&#xff0c;A [A, B] 是将矩阵 A 和矩阵 B 进行水平拼接的操作。具体来说&#xff0c;它是将矩阵 B 按照列的方式拼接到矩阵 A 的右边。 2-将两个矩阵竖直拼接 在 MATLAB 中&#xff0c;A [A&#xff1b; B] 是将矩阵 A 和矩阵 B 进行竖…

C#使用StructLayout特性来控制内存结构

C#在调用WInAPI函数时&#xff0c;可能会看到如下的声明 1 [StructLayout(LayoutKind.Sequential)] 2 public struct RECT 3 { 4 public int Left; 5 public int Top; 6 public int Right; 7 public int Bott…

【单例模式】

单例模式是指在内存中只会创建且仅创建一次对象的设计模式。 一、实现方式 1. 饿汉式 在类加载的时候就创建实例&#xff0c;无论是否使用&#xff0c;实例都会被创建。优点是实现简单&#xff0c;线程安全。缺点是可能造成资源浪费&#xff0c;而程序可能不一定会使用这个实例…

ACID 原则

ACID 是数据库事务管理中的四个关键属性&#xff0c;用于确保数据库中的数据在并发操作和异常情况下保持一致性和可靠性。ACID 代表以下四个属性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a; 原子性确保事务中的所有操作要么全部成功执行&#xff0c;要…