首页 > 其他分享 >forward_list

forward_list

时间:2024-08-20 19:28:14浏览次数:5  
标签:元素 list words forward my your

forward_list

forward_list 容器以单链表的形式存储元素。forward_list 的模板定义在头文件 forward_list 中。fdrward_list 和 list 最主要的区别是:它不能反向遍历元素;只能从头到尾遍历。

forward_list 的单向链接性也意味着它会有一些其他的特性:

  1. 无法使用反向迭代器。只能从它得到前向迭代器,这些迭代器都不能解引用,只能自增;
  2. 没有可以返回最后一个元素引用的成员函数 back();只有成员函数 front();
  3. 因为只能通过自增前面元素的迭代器来到达序列的终点,所以 push_back()pop_back()emplace_back() 也无法使用。

forward_list 容器的构造函数的使用方式和 list 容器相同。forward_list 的迭代器都是前向迭代器。它没有成员函数 size(),因此不能用一个前向迭代器减去另一个前向迭代器,但是可以通过使用定义在头文件 iterator 中的 distance() 函数来得到元素的个数。

因为 forward_list 正向链接元素,所以只能在元素的后面插入或粘接另一个容器的元素,这一点和 list 容器的操作不同,list 可以在元素前进行操作。因为这个,forward_list 包含成员函数 splice_after()insert_after(),用来代替 list 容器的 splice()insert();顾名思义,元素会被粘接或插入到 list 中的一个特定位置。当需要在 forward_list 的开始处粘接或插入元素时,这些操作仍然会有问题。除了第一个元素,不能将它们粘接或插入到任何其他元素之前。

这个问题可以通过使用成员函数 cbefore_begin()before_begin() 来解决。它们分别可以返回指向第一个元素之前位置的 const 和 non-const 迭代器。所以可以使用它们在开始位置插入或粘接元素。

#include <string>
#include <forward_list>

using namespace std;

int main() {
    forward_list<string> my_words{"three", "six", "eight"};
    forward_list<string> your_words{"seven", "four", "nine"};
    // 1.单个元素
    // 将 your_words 的最后一个元素粘接到 my_words 的开始位置
    // 第三个参数指向待转移元素之前的一个元素,只有后面的单个元素被转移。
    my_words.splice_after(my_words.before_begin(), your_words, ++begin(your_words));
    // my_words: nine three six eight
    // your_words: seven four

    // 2.一段元素
    // 后两个参数 first 和 last,它包括 first 和 last 之间的所有元素,但不包括 first 和 last 元素本身
    my_words.splice_after(my_words.before_begin(), your_words, begin(your_words), end(your_words));
    // my_words: four nine three six eight
    // your_words: seven

    // 3.所有元素
    my_words.splice_after(my_words.before_begin(), your_words);
    // my_words: seven four nine three six eight
    // your_words: 
}

forward_list 和 list —样都有成员函数 sort() 和 merge(),它们也都有 remove()、remove_if() 和unique(),所有这些函数的用法都和 list 相同。

标签:元素,list,words,forward,my,your
From: https://www.cnblogs.com/sprinining/p/18370114

相关文章

  • list
    listlist<T>容器模板定义在list头文件中,是T类型对象的双向链表。list容器具有一些vector和deque容器所不具备的优势,它可以在常规时间内,在序列已知的任何位置插入或删除元素。这是我们使用list,而不使用vector或deque容器的主要原因。list的缺点是无法通过位置来......
  • TreeView和ListView数据库查询数据联动操作
    好久不用了,重新整理下放这里以备需要使用,功能见图数据库表结构定义TreeViewaddObject中data存储的记录集typePNode=^TNode;TNode=recordid:Integer;tcmc:string;mxid:string;end;填充TreeView代码procedureTForm1.FillTree(TreeV......
  • C++第十一弹 -- STL之List的剖析与使用
    文章索引前言1.list的介绍2list的使用2.1list的构造函数2.2iterator的使用2.3listcapacity2.4listelementaccess2.5listmodifiers3.list的迭代器失效4.list与vector的对比总结前言本篇我们旨在探讨对于STL中list的使用,下一篇我们将会对list进行底层......
  • java中List列表转成子父集列表
    一、前言       在Java中,如果你有一个表示父子关系的列表,并且想要把这个列表转成一个子父集list列表树目录,一般来说想要把list列表转成一个子父集列表,这个对象需要在属性中必须要有几个字段,id(节点id)、parentId(指向父节点id)、children(子节点),通过三个字段可以组装成一......
  • show processlist查看Mysql当前正在运行的线程
    showprocesslistshowprocesslist;--或者SELECTid,db,user,host,command,time,state,infofrominformation_schema.PROCESSLISTWHERE1=1--andcommand!='Sleep'ANDHOSTLIKE'%localhost%'orderbytimedescID定义:每个连......
  • TCPIP路由技术第一卷第八章OSPF 第五部分-2 Forward address
    tcp/ip_ospf案例研究5forwardaddressforwardaddress:intheautonomoussystem'sinteriortofunctionas"routeserver"initsas-external-lsas,packetsshouldberouteddirectly通告0.0.0.0非0的情况nssa区域:转发地址为asbr上最大的环回口非nssa:直接为下一跳地......
  • TCPIP路由技术第一卷 第三大部分-4 路由更新Distribute-list
    外部的路由可以进入到路由表中,路由表中的路由也可以被通告出去,那么路由过滤器正是通过管制这些出入路由表的路由来工作的.distributelisteigrpoutin方向完全满足ospfout方向不行r1:routerripnoautoversion2network12.0.0.0r2:routerripnoautoversion2ne......
  • TCPIP路由技术第一卷 第三大部分-5 Prefix-list和扩展ACL
    r1:routerripredistribute-listprefix1outs1/1ipprefix-list1permit44.1.1.0/24ipprefix-listnamepermit172.16.0.0/22ge24le24/22前缀22bit相同ge24掩码范围最小24位.当没有ge(172.16.0.0/22),掩码范围最小值跟前缀相同le24(172.16.0.0/22le24)掩码范......
  • Java中ArrayList集合—基础详解(知识点+代码示例)
    ArrayList(集合)ArrayList(集合)ArrayList(集合)10.1ArrayList成员方法10.2集合练习10.2.1添加字符串10.2.2添加数字10.2.3添加学生对象并遍历10.2.4集合概述:集合可以直接存储引用数据类型,不能直接存储基本数据类型,如果要存储基本数据类型,需要将基本数据类型变成对......
  • 易优field获取channelartlist标签的字段值-EyouCms手册
    【基础用法】名称:field功能:获取channelartlist标签里的字段值,field标签只能在channelartlist标签里使用。语法:{eyou:channelartlisttypeid='栏目ID'type='son'row='20'}{eyou:fieldname='typename'/}{/eyou:channelartlist}参数:name=''字段名底......