网站举报官网电子商务平台经营者对于竞价排名的商品或服务
网站举报官网,电子商务平台经营者对于竞价排名的商品或服务,造价员报考官网,wordpress家居主题C中的forward_list容器详解
1. forward_list概述
forward_list是C11引入的单向链表容器#xff0c;相比list更加节省空间#xff0c;但只支持单向遍历。它是最简单的链表结构#xff0c;每个元素只包含指向下一个元素的指针。
2. 基本特性
单向链表#xff1a;每个元素只包…C中的forward_list容器详解1.forward_list概述forward_list是C11引入的单向链表容器相比list更加节省空间但只支持单向遍历。它是最简单的链表结构每个元素只包含指向下一个元素的指针。2. 基本特性单向链表每个元素只包含指向下一个元素的指针高效插入/删除在已知位置插入/删除是O(1)O(1)O(1)时间复杂度无随机访问不支持下标操作和反向遍历最小内存开销相比list节省一个指针的空间无size()操作为节省空间不维护大小信息3. 头文件与声明#includeforward_listusingnamespacestd;forward_listintflst1;// 空forward_listforward_liststringflst2(10);// 包含10个默认构造的stringforward_listdoubleflst3(5,3.14);// 包含5个3.14forward_listcharflst4{a,b,c};// 初始化列表4. 构造函数与初始化4.1 默认构造forward_listintflst;4.2 填充构造forward_listintflst(10);// 10个默认初始化的int(0)forward_listintflst(5,100);// 5个1004.3 范围构造intarr[]{1,2,3};forward_listintflst(arr,arr3);4.4 拷贝构造forward_listintflst2(flst1);5. 容量操作5.1empty()if(flst.empty()){coutForward_list is empty;}5.2max_size()coutflst.max_size();// 返回forward_list可容纳的最大元素数6. 元素访问6.1front()flst.front()5;// 修改第一个元素intfirstflst.front();// 访问第一个元素7. 修改操作7.1push_front()flst.push_front(5);// 在头部插入57.2pop_front()flst.pop_front();// 删除头部元素7.3insert_after()autoitflst.insert_after(flst.before_begin(),15);// 在头部插入15flst.insert_after(it,{1,2,3});// 在指定位置后插入多个元素7.4erase_after()flst.erase_after(flst.before_begin());// 删除第一个元素flst.erase_after(it,flst.end());// 删除从it到end的所有元素7.5clear()flst.clear();// 清空所有元素7.6swap()forward_listintflst2;flst.swap(flst2);// 交换两个forward_list的内容8. 特殊操作8.1splice_after()forward_listintflst2{4,5,6};flst.splice_after(flst.before_begin(),flst2);// 将flst2所有元素移动到flst头部8.2remove()flst.remove(5);// 删除所有值为5的元素8.3remove_if()flst.remove_if([](intn){returnn%20;});// 删除所有偶数8.4unique()flst.unique();// 删除连续重复元素8.5merge()forward_listintflst2{4,5,6};flst.sort();flst2.sort();flst.merge(flst2);// 合并两个已排序forward_list8.6sort()flst.sort();// 升序排序flst.sort(greaterint());// 降序排序8.7reverse()flst.reverse();// 反转forward_list9. 迭代器9.1before_begin()autoitflst.before_begin();// 获取第一个元素前的位置9.2begin()end()for(autoitflst.begin();it!flst.end();it){cout*it ;}10. 完整示例#includeiostream#includeforward_list#includealgorithmusingnamespacestd;intmain(){// 创建并初始化forward_listforward_listintflst{2,3,4};// 头部操作flst.push_front(1);// 头部插入1// 访问元素coutFirst element: flst.front()endl;// 插入元素autoitflst.insert_after(flst.begin(),5);// 在第二个位置插入5flst.insert_after(it,{7,8,9});// 在5后面插入7,8,9// 删除元素flst.pop_front();// 删除头部元素flst.remove(8);// 删除所有8// 特殊操作forward_listintflst2{10,11,12};flst.splice_after(flst.before_begin(),flst2);// 合并flst2到flstflst.sort();// 排序flst.unique();// 去重// 遍历forward_listcoutAll elements: ;for(intnum:flst){coutnum ;}coutendl;// 容量信息coutIs empty: (flst.empty()?Yes:No)endl;return0;}11. 性能提示在已知位置插入/删除元素性能很好(O(1)O(1)O(1))查找元素需要遍历(O(n)O(n)O(n))迭代器在插入/删除操作后仍然有效(除非删除的是迭代器指向的元素)比list更节省内存(每个节点少一个指针)适合只需要单向遍历且对内存敏感的场合