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

news/2024/10/11 8:56:16/

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/news/1537366.html

相关文章

uniapp 编程体验

全局变量 方法一 改App.vue // App.vue export default {globalData: {userInfo: null,token: },onLaunch: function () {// 初始化全局变量this.globalData.userInfo { name: 张三, age: 30 };} }// 在其他页面或组件中访问 const app getApp(); console.log(app.globalDa…

基于floor函数报错注入sqli-labs less-5和less-6

sqli-labs第五六关基于floor报错注入 测试基于虚拟机搭建的靶场&#xff0c;在主机浏览器进行测试 首先能到第五关的对于基础的字符数字型判断&#xff0c;闭合方式&#xff0c;列数判断有一定了解&#xff0c;所以不再进行演示&#xff0c;直接进行数据爆破 关于floor函数报错…

如何打破双亲委派机制

双亲委派底层运行过程 双亲委派模型对于保证Java程序的稳定运作很重要&#xff0c;但它的实现却非常简单&#xff0c;实现双亲委派的代码都集中在 java.lang.ClassLoader的loadClass()方法之中&#xff0c;代码简单&#xff0c;逻辑清晰易懂:先检查类是否已经被加载过&#xf…

C++之LIST模拟实现(代码纯享版)

目录 文章目录 前言 一、代码 总结 前言 本文主要展示了模拟List的代码实现 一、代码 #pragma once #include<iostream> #include<assert.h> using namespace std; namespace zlh {template<class T>struct list_node{T _data;list_node<T>* _next;l…

Chromium 中chrome.downloads扩展接口c++

一、前端chrome.downloads 使用 chrome.downloads API 以编程方式启动、监控、操作和搜索下载内容。 权限 downloads 您必须在扩展程序清单中声明 "downloads" 权限&#xff0c;才能使用此 API。 {"name": "My extension",..."permiss…

目录工具类 - C#小函数类推荐

此文记录的是目录工具类。 /***目录工具类Austin Liu 刘恒辉Project Manager and Software DesignerE-Mail: lzhdim163.comBlog: http://lzhdim.cnblogs.comDate: 2024-01-15 15:18:00***/namespace Lzhdim.LPF.Utility {using System.IO;/// <summary>/// The Objec…

【Docker从入门到进阶】06.常见问题与解决方案 07.总结与资源

6. 常见问题与解决方案 在使用Docker进行开发和部署过程中&#xff0c;可能会遇到各种问题。以下是一些常见问题及其解决方案&#xff1a; 容器启动失败和调试 在使用 Docker 时&#xff0c;容器启动失败或立即退出可能会导致一定的困扰&#xff0c;以下是进一步深入解决该问…

Visual Studio 2022安装(含重生版)

前言&#xff1a; 昨天调试代码的时候发现程序怎么都运行不了&#xff0c;错误显示无法找到文件啊啊啊&#xff0c;能力有限&#xff0c;找不出错误源&#xff0c;然后就狠心删掉所有相关文件来“重新开始”&#xff01; 正文&#xff1a; 1.官网下载&#xff08;内定中文版…