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

网站字体大小画廊网站模板

网站字体大小,画廊网站模板,最新新闻热点事件及评论,承包小活的平台在实际工程中#xff0c;list特别适合以下情况#xff1a; 高频插入删除#xff1a;如实时交易系统中的订单管理 大型对象存储#xff1a;避免vector扩容时的大规模复制 迭代器稳定性要求高#xff1a;需要长期保持有效的元素引用 中间位置操作频繁#xff1a;如文本编… 在实际工程中list特别适合以下情况 高频插入删除如实时交易系统中的订单管理 大型对象存储避免vector扩容时的大规模复制 迭代器稳定性要求高需要长期保持有效的元素引用 中间位置操作频繁如文本编辑器的撤销操作链 前言 在C标准模板库(STL)中list容器就像是一位低调而技艺高超的工匠它以独特的双向链表结构在特定的应用场景中展现出无可替代的价值。本文将带领读者深入探索list的设计哲学、实现原理以及高效使用方法通过丰富的代码示例和原理图解帮助开发者真正掌握这一重要容器。 list的底层实现揭秘 list的每个节点都是一个精妙设计的结构体通常实现为 template typename T struct __list_node {__list_node* prev; // 指向前驱节点__list_node* next; // 指向后继节点T data; // 存储实际数据 }; 一、list容器基本操作大全 1. 创建和初始化list list提供了多种灵活的初始化方式 #include list #include iostream using namespace std;// 1. 创建空list listint list1;// 2. 创建包含n个默认值的list liststring list2(5); // 5个空字符串// 3. 创建包含n个指定值的list listdouble list3(3, 3.14); // [3.14, 3.14, 3.14]// 4. 通过初始化列表创建 listchar list4 {a, b, c, d};// 5. 通过迭代器范围创建 int arr[] {1, 3, 5, 7, 9}; listint list5(arr, arr sizeof(arr)/sizeof(arr[0]));// 6. 拷贝构造函数 listint list6(list5); 2. 元素访问操作 虽然list不支持随机访问但仍提供了一些访问方法 #includelist #includeiostream int main() { listint nums {10, 20, 30, 40}; // 访问第一个元素 cout 第一个元素: nums.front() endl; // 10 // 访问最后一个元素 cout 最后一个元素: nums.back() endl; // 40 // 遍历访问所有元素 cout 所有元素: ; for(int num : nums) {cout num ; } cout endl; // 使用迭代器访问 cout 第二个元素: ; auto it nums.begin(); advance(it, 1); cout *it endl; // 20 } 3. 修改list内容 添加元素 liststring fruits; // 在末尾添加元素 fruits.push_back(apple); fruits.push_back(banana); // 在开头添加元素 fruits.push_front(orange); fruits.push_front(grape);// 在指定位置插入单个元素 auto it fruits.begin(); advance(it, 2); fruits.insert(it, pear);// 在指定位置插入多个相同元素 fruits.insert(it, 3, peach); // 在指定位置插入另一个容器的元素范围 vectorstring berries {strawberry, blueberry, raspberry}; fruits.insert(it, berries.begin(), berries.end()); // 在第一个 peach 前插入 berries 的所有元素 // fruits: [grape, orange, strawberry, blueberry, raspberry, peach, peach, peach, pear, apple, banana] // 使用emplace高效构造并插入 fruits.emplace_back(watermelon); fruits.emplace_front(kiwi); it fruits.begin(); advance(it, 3); fruits.emplace(it, mango); 删除元素 listint numbers {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 删除末尾元素 numbers.pop_back();// 删除开头元素 numbers.pop_front();// 删除指定位置的单个元素 auto it numbers.begin(); advance(it, 3); numbers.erase(it);// 删除指定范围的元素 it numbers.begin(); auto it2 numbers.begin(); advance(it, 2); advance(it2, 5); numbers.erase(it, it2);// 删除所有等于特定值的元素 numbers.remove(8);// 删除满足条件的元素 numbers.remove_if([](int n) { return n % 2 0; }); // 删除所有偶数// 清空整个list numbers.clear(); 4. 容量查询 listint primes {2, 3, 5, 7, 11};// 检查是否为空 if (primes.empty()) {cout list为空 endl; } else {cout list不为空 endl; }// 获取元素数量 cout 元素个数: primes.size() endl;// 获取可能的最大元素数量 cout 最大容量: primes.max_size() endl; 5. list特殊操作 排序和去重 listint data {5, 3, 7, 1, 9, 2, 5, 3, 8};// 默认升序排序 data.sort();// 自定义排序规则 data.sort([](int a, int b) {return a b; // 降序排序 });// 去重(必须先排序) data.unique();// 自定义去重条件 data.unique([](int a, int b) {return abs(a - b) 1; // 去除相邻且差值≤1的元素 }); 里面的包含拉姆达表达式可以看看可以缩减代码量捕获变量是可以稍微轻松点 二、list操作性能分析 时间复杂度对比表 操作时间复杂度说明push_back/push_frontO(1)在首尾添加元素非常高效insertO(1)插入本身是常数时间但找到位置需要O(n)eraseO(1)删除本身是常数时间但找到位置需要O(n)pop_back/pop_frontO(1)删除首尾元素非常高效size实现依赖可能是O(1)或O(n)取决于具体实现emptyO(1)检查是否为空总是很快front/backO(1)访问首尾元素非常高效sortO(n log n)使用归并排序算法mergeO(n)合并两个已排序的listreverseO(n)反转整个listuniqueO(n)去除相邻的重复元素spliceO(1)拼接操作非常高效只是指针调整remove/remove_ifO(n)需要遍历整个list 常见错误避免 // 错误1随机访问 listint lst {1,2,3}; // int x lst[1]; // 错误list不支持[]操作符// 错误2无效的迭代器使用 auto iter lst.begin(); lst.erase(iter); // *iter; // 错误iter已失效// 错误3未排序直接unique listint dup {3,1,2,2,3,1}; // dup.unique(); // 不会去重所有重复元素必须先排序// 错误4合并未排序的list listint a {3,1,2}; listint b {6,4,5}; // a.merge(b); // 未定义行为必须先排序 性能优化建议 批量操作尽量使用范围插入/删除而非单个操作 避免频繁size()某些实现中size()可能是O(n)操作 优先使用emplace避免不必要的临时对象创建 总结 C中的list容器是一个功能强大且特性独特的序列容器它通过双向链表实现提供了高效的插入删除操作。掌握list的关键在于 理解其链表结构的本质特性 熟练运用各种插入删除方法 合理利用特有的sort、merge、splice 注意与其他容器的区别和适用场景 遵循最佳实践以获得最佳性能 list虽然在随机访问方面不如vector高效但在需要频繁修改中间元素的场景下它的性能优势无可替代。
http://www.hkea.cn/news/14359793/

相关文章:

  • 手机网站接入微信登录适合手机端的wordpress
  • 在建设银行网站上还贷做网站现在好弄么
  • 银川网站推广方式广州建网站公司排名
  • 理财网站建设方案书wordpress网站上传服务器
  • 北京建站推广给静态网站加后台
  • 装修门户网站程序 cms瑞丽住建局网站
  • 江苏建设人才考试网是啥网站免备案网站建设
  • 做最好的导航网站企业网站优化分为两个方向
  • 金山网站建设费用做一个微网站平台
  • 介绍网站ppt该怎么做网页设计入门首先要学什么
  • 苏州园区建设网站首页深圳seo优化推广
  • 什么是网站栏目标题申请域名之后如何做网站
  • 淘宝客网站开发上架注册微信小程序流程
  • 有什么正规的网站做代加工装修公司营销网站模板
  • 做线上交互的网站wordpress-demo
  • 英国小子做房产网站嵌入式软件开发简历
  • 制作自己的平台网站河南建设监理协会新网站
  • php怎么创建网站企业信息查询系统入口
  • 帮人做图挣外快的网站jsp网站开发技巧
  • 创建一个新的公司网站好推建站
  • 珠宝类企业网站(手机端)wordpress中文网址转换
  • 东莞建设网站公司公司做网站要多少钱
  • dota2海涛做的网站wordpress 个人简介
  • 网站seo步骤移动端显卡天梯图2021
  • 网站维护费用包括哪些校园加盟网站建设
  • 网站开发研究现状外包网站建设公司
  • 网站怎么制作软件wordpress来源转载
  • 网站开发流程人物wordpress古文主题
  • 快站建站画册设计需要注意的事项
  • 网站开发哪些公司wordpress响应 延时