2026/6/27 20:41:52
网站建设
项目流程
古典风格网站模版,个人网站设计主题,外贸网站都有哪些内容,石龙镇网站仿做C中的list容器详解
1. list概述
list是C STL中的双向链表容器#xff0c;支持在任何位置高效插入和删除元素。与vector和deque不同#xff0c;list不提供随机访问能力#xff0c;但提供了高效的插入和删除操作。
2. 基本特性
双向链表#xff1a;每个元素包含指向前后元素的…C中的list容器详解1.list概述list是C STL中的双向链表容器支持在任何位置高效插入和删除元素。与vector和deque不同list不提供随机访问能力但提供了高效的插入和删除操作。2. 基本特性双向链表每个元素包含指向前后元素的指针高效插入/删除在任何位置插入/删除都是O(1)O(1)O(1)时间复杂度无随机访问不支持下标操作必须通过迭代器遍历不连续存储元素分散在内存中3. 头文件与声明#includelistusingnamespacestd;listintlst1;// 空listliststringlst2(10);// 包含10个默认构造的stringlistdoublelst3(5,3.14);// 包含5个3.14listcharlst4{a,b,c};// 初始化列表4. 构造函数与初始化4.1 默认构造listintlst;4.2 填充构造listintlst(10);// 10个默认初始化的int(0)listintlst(5,100);// 5个1004.3 范围构造intarr[]{1,2,3};listintlst(arr,arr3);4.4 拷贝构造listintlst2(lst1);5. 容量操作5.1size()coutlst.size();// 返回元素数量5.2empty()if(lst.empty()){coutList is empty;}5.3max_size()coutlst.max_size();// 返回list可容纳的最大元素数5.4resize()lst.resize(10);// 调整为10个元素新增元素默认初始化lst.resize(15,5);// 调整为15个元素新增元素初始化为56. 元素访问6.1front()lst.front()5;// 修改第一个元素intfirstlst.front();// 访问第一个元素6.2back()lst.back()8;// 修改最后一个元素intlastlst.back();// 访问最后一个元素7. 修改操作7.1push_back()lst.push_back(10);// 在尾部插入107.2push_front()lst.push_front(5);// 在头部插入57.3pop_back()lst.pop_back();// 删除尾部元素7.4pop_front()lst.pop_front();// 删除头部元素7.5insert()autoitlst.insert(lst.begin(),15);// 在头部插入15lst.insert(it,{1,2,3});// 在指定位置插入多个元素7.6erase()lst.erase(lst.begin());// 删除第一个元素lst.erase(lst.begin(),lst.end());// 删除所有元素7.7clear()lst.clear();// 清空所有元素7.8swap()listintlst2;lst.swap(lst2);// 交换两个list的内容8. 特殊操作8.1splice()listintlst2{4,5,6};lst.splice(lst.end(),lst2);// 将lst2所有元素移动到lst尾部lst.splice(lst.begin(),lst2,lst2.begin());// 移动lst2的第一个元素8.2remove()lst.remove(5);// 删除所有值为5的元素8.3remove_if()lst.remove_if([](intn){returnn%20;});// 删除所有偶数8.4unique()lst.unique();// 删除连续重复元素8.5merge()listintlst2{4,5,6};lst.sort();lst2.sort();lst.merge(lst2);// 合并两个已排序list8.6sort()lst.sort();// 升序排序lst.sort(greaterint());// 降序排序8.7reverse()lst.reverse();// 反转list9. 迭代器9.1begin()end()for(autoitlst.begin();it!lst.end();it){cout*it ;}9.2rbegin()rend()for(autoritlst.rbegin();rit!lst.rend();rit){cout*rit ;// 反向遍历}10. 完整示例#includeiostream#includelist#includealgorithmusingnamespacestd;intmain(){// 创建并初始化listlistintlst{2,3,4};// 头部和尾部操作lst.push_front(1);// 头部插入1lst.push_back(5);// 尾部插入5// 访问元素coutFirst element: lst.front()endl;coutLast element: lst.back()endl;// 插入元素autoitnext(lst.begin(),2);// 获取第3个位置的迭代器lst.insert(it,{7,8,9});// 在第3个位置插入7,8,9// 删除元素lst.pop_front();// 删除头部元素lst.remove(8);// 删除所有8// 特殊操作listintlst2{10,11,12};lst.splice(lst.end(),lst2);// 合并lst2到lstlst.sort();// 排序lst.unique();// 去重// 遍历listcoutAll elements: ;for(intnum:lst){coutnum ;}coutendl;// 容量信息coutSize: lst.size()endl;coutIs empty: (lst.empty()?Yes:No)endl;return0;}11. 性能提示在任何位置插入/删除元素性能都很好(O(1)O(1)O(1))查找元素需要遍历(O(n)O(n)O(n))迭代器在插入/删除操作后仍然有效(除非删除的是迭代器指向的元素)适合频繁插入/删除但不需随机访问的场景