关于做外汇现货的网站工信部网站备案时间

张小明 2025/12/31 6:03:06
关于做外汇现货的网站,工信部网站备案时间,甘肃住房和城乡建设厅网站首页,wordpress会计模板下载目录 前言#xff1a;为什么需要list 二、基础认知#xff1a;list的底层与初始化 2.1什么是list 2.2头文件与命名空间 2.3初始化方式 三、迭代器误区 四、核心操作#xff1a;增删查改 4.1元素添加#xff1a;push_back/push_front/insert 4.2元素删除#xff1…目录前言为什么需要list二、基础认知list的底层与初始化2.1什么是list2.2头文件与命名空间2.3初始化方式三、迭代器误区四、核心操作增删查改4.1元素添加push_back/push_front/insert4.2元素删除pop_back/pop_front/erase/clear五、常用操作六、进阶玩法list的特殊成员函数6.1排序list::sort vs 算法库sort6.2去重unique函数的使用前提6.3合并与反转merge/reverse前言为什么需要list我们常用的vector基于动态数组实现其优势是支持随机访问通过[]或at()能快速定位元素。但它的短板也十分突出当在数组中间或头部插入/删除元素时需要移动后续所有元素时间复杂度为O(n)且扩容时可能需要重新分配内存并拷贝数据存在性能开销和内存浪费。list的底层是双向循环链表每个元素节点包含数据和两个指针分别指向前和后节点节点间通过指针连接无需连续内存空间。这种结构使其在头尾插入/删除和中间插入/删除场景下仅需修改指针指向时间复杂度均为O(1)找到目标位置后完美解决了vector的痛点。所以当你需要进行大量“频繁插入删除”操作且对随机访问需求较低时list是比vector更优的选择。二、基础认知list的底层与初始化2.1什么是listlist是双向循环链表结构有两个特点每个节点包含prev前指针、data数据、next后指针尾节点的next指针指向头节点头节点的prev指针指向尾节点形成闭环便于首尾操作关于双向链表如果不了解可以去看我的这篇博客帮助理解。链接数据结构2单链表-CSDN博客2.2头文件与命名空间#include iostream #include list using namespace std; //也可以使用std::list明确命名空间2.3初始化方式list的初始化方式灵活可根据实际需求选择void test1() { listint lt1; listint lt2 { 1, 2, 3, 4, 5 }; // 等价于listint lst2{1,2,3,4,5}; vectorint v { 6, 7, 8 }; listint lt3(v.begin(), v.end()); // 从vec的开头到结尾构造lst3 listint lt4(5, 10); // 5个元素每个元素值为10 print(lt1); print(lt2); print(lt3); print(lt4); }我们这里为了方便验证根据之前学习string和vector的经验写了一个打印函数void print(listint lt) { for (auto n : lt) { cout n ; } cout endl; }验证结果三、迭代器误区list中有的迭代器和string或vector中的区别不大但需要注意的是list中不支持[ ]随机访问/at随机访问而且list中的迭代器不能直接n必须要一个一个从开头遍历到想要的地方。因为list是链表结构没有连续的内存地址无法通过“基地址偏移量”的方式快速定位元素。简单来说就是list在物理空间上的位置也就是说它里面前后节点的位置在物理上不连续。void test2() { listint lt { 1, 2, 3, 4, 5 }; //auto it lt.begin() 3;//err auto it lt.begin(); int k 3; while (k--) { it; } listint lt2(it, lt.end()); print(lt); print(lt2); }验证结果四、核心操作增删查改4.1元素添加push_back/push_front/insertvoid test3() { listint lt1; lt1.push_back(1); lt1.push_back(2); lt1.push_back(3); lt1.push_back(4); lt1.push_back(5); print(lt1); lt1.push_front(0); print(lt1); //加一个 auto it lt1.begin(); int k 3; while (k--) { it; } lt1.insert(it, 3); print(lt1); //加多个一样的 auto it1 lt1.begin(); int i 3; while (i--) { it1; } lt1.insert(it1, 2, 3); print(lt1); //加个迭代器区间的 listint lt2 { 1,2,3,4,5 }; lt1.insert(lt1.end(), lt2.begin(), lt2.end()); print(lt1); }验证结果4.2元素删除pop_back/pop_front/erase/clear删除操作的核心注意点是迭代器失效问题——list的erase会删除指定节点并返回下一个有效的迭代器若直接使用失效的迭代器会导致程序崩溃。void test4() { listint lt { 0, 20, 20, 20, 1, 10, 2, 3, 4, 100, 200 }; print(lt); lt.pop_back(); print(lt); lt.pop_front(); print(lt); //删除单个元素用erase返回值更新迭代器 auto it lt.begin(); int i 3; while (i--) { it; } it lt.erase(it); // 删除后it指向后续的10避免失效 print(lt); //删除迭代器范围的元素左闭右开 auto it1 lt.begin(); auto it2 lt.begin(); int j 3; while (j--) { it1; } int k 6; while (k--) { it2; } auto it_start it1; auto it_end it2; lt.erase(it_start, it_end); print(lt); lt.clear(); print(lt); }验证结果五、常用操作按值删除remove删除所有等于val的元素按条件删除remove_if删除满足条件的元素void test5() { listint lt { 0,1,2,3,4,5 }; print(lt); lt.remove(2); // 删除所有值为2的元素 print(lt); lt.remove_if([](int val) { return val % 2 1; });//删除所有奇数 print(lt); }验证结果size/empty/resize用于管理list的状态void test6() { listint lt { 1,2,3,4,5 }; print(lt); cout lt.size() endl; lt.resize(7, 6); print(lt); lt.resize(2); print(lt); cout lt空吗 (lt.empty() ? 是 : 否) endl; }验证结果六、进阶玩法list的特殊成员函数list提供了一些专属的成员函数这些函数基于链表特性优化性能优于STL通用算法是进阶使用的核心技巧。6.1排序list::sort vs 算法库sortSTL算法库的sort函数要求迭代器支持随机访问而list的迭代器是双向迭代器因此无法直接使用algorithm中的sort必须使用list自带的sort成员函数。list::sort基于双向链表优化采用归并排序思想时间复杂度O(nlogn)。void test7() { listint lt { 3, 1, 4, 1, 5, 9 }; // 1. 正确用法list自带的sort成员函数 lt.sort(); // 默认升序排序 print(lt); // 2. 自定义降序排序用lambda表达式 lt.sort([](int a, int b) { return a b; }); print(lt); // 3. 错误示范无法使用算法库的sort // sort(lt.begin(), lt.end()); // 编译报错迭代器类型不匹配 }验证结果6.2去重unique函数的使用前提list::unique用于删除相邻的重复元素因此使用前必须先排序确保重复元素相邻否则无法彻底去重。void test8() { listint lt { 3, 1, 4, 1, 5, 9 }; lt.sort(); print(lt); lt.unique(); print(lt); }验证结果6.3合并与反转merge/reversemerge用于合并两个已排序的list合并后原list会被清空reverse用于反转list的元素顺序时间复杂度O(n)。void test9() { listint lt1 { 1, 3, 5 }; print(lt1); listint lt2 { 2, 4, 6 }; print(lt2); lt1.merge(lt2); // 合并lt2到lt1lst2需已排序 print(lt1); print(lt2); lt1.reverse(); print(lt1); }验证结果
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

如何建立自己免费网站vs做网站的书籍

作为Firefox的热门分支版本,Waterfox明确表示拒绝接入AI功能。考虑到Mozilla将其浏览器AI化的计划有多么不受欢迎,这一举措可能会为Waterfox赢得一些转换用户。Waterfox博客的最新文章在URL中就直接标明这是"对Mozilla的回应"。首席开发者Alex…

张小明 2025/12/29 0:49:46 网站建设

html5企业网站建设wordpress图片设置水印2019

01困境:质量数据管理的核心痛点在制造业、医药、食品、电子等行业的质量管控体系中,质量数据是洞察产品缺陷、优化生产流程、规避经营风险的 “核心密码”。但传统管理模式下,企业普遍面临一些质量数据管理难题,主要体现为① 数据…

张小明 2025/12/29 0:49:44 网站建设

如何修改网站后台时间贵阳网站制作专业

EmotiVoice 能否成为心理疗愈的声音伴侣?一次关于温柔语音的探索 在深夜难以入眠时,你是否曾渴望一个熟悉而温和的声音轻声告诉你:“没关系,我在这里”?在焦虑发作的瞬间,有没有一种声音能像老友般理解你的…

张小明 2025/12/29 0:49:42 网站建设

长沙网站制作费用为什么wordpress升级

1.实验目的1.掌握内核模块基本编程技术2.向内核中添加一个内核模块,打印进程控制块信息,编译模块3.加载、卸载模块2.实验截图及结果分析(1)实验截图① 编译环节② 加载模块③ 卸载模块卸载前:卸载后:④ 删除…

张小明 2025/12/29 16:15:51 网站建设

怎么设计网站页面肇庆制作网站软件

基于Beego的轻量级功能权限管理系统设计与实现 基于Beego的轻量级功能权限管理系统:毕业设计源码与论文全解析 在当今数字化时代,权限管理系统已成为Web应用开发中不可或缺的核心组件。无论是企业后台管理系统、内部办公平台,还是SaaS服务&…

张小明 2025/12/29 16:15:48 网站建设

做网络推广选择哪个网站好xx单位网站建设方案

EmotiVoice语音合成服务高并发架构设计 在内容平台、虚拟偶像和智能交互设备日益普及的今天,用户对语音输出的要求早已不再满足于“能说”,而是追求“说得像人”——有情感、有个性、有温度。传统的文本转语音(TTS)系统虽然稳定高…

张小明 2025/12/29 16:15:42 网站建设