每日学习笔记:C++ STL 的forward_list

定义

特点

 

操作函数

 

 

元素查找、移除或安插

forward_list::emplace_after

arg...指的是元素构造函数的参数(0~N个)

#include <iostream>
#include <memory>
#include <list>
#include <forward_list>
using namespace std;class aaa
{
public:aaa() { c = 666;};aaa(int a, int b) {c = a + b;};friend std::ostream& operator << (std::ostream& o, const aaa& s) {o << s.c;return o;}private:int c;
};int main()
{forward_list<aaa> t1{ {1,1},{},{2,2} }; std::copy(t1.cbegin(), t1.cend(), std::ostream_iterator<aaa>(cout, " "));cout << endl;t1.emplace_after(t1.before_begin(), 6, 8);std::copy(t1.cbegin(), t1.cend(), std::ostream_iterator<aaa>(cout, " "));cout << endl;t1.emplace_after(t1.before_begin());std::copy(t1.cbegin(), t1.cend(), std::ostream_iterator<aaa>(cout, " "));cout << endl;forward_list<int> t{ 1,2,3 }; t.emplace_after(t.before_begin(), 55);std::copy(t.cbegin(), t.cend(), std::ostream_iterator<int>(cout, "-"));for (;;);
}

forward_list::splice_after

<C++标准库第二版>书中介绍了c.splice_after(pos,c2,c2pos)的定义【c2pos所指的下一个转移到pos所指的下一个】,但是示例代码却写成了

这个调用的参数顺序与函数定义的参数顺序并不一致,于是我专门验证了一下,发现这个写法的运行结果与按照函数定义的参数顺序t2.splice_after(pos2, t1, pos1);运行结果居然相同,甚至我改成了下面这样的调用,结果仍然相同

forward_list<int> t3; //定义一个空的forward_list
t3.splice_after(pos2, forward_list<int>(), pos1); //形参传入一个空的forward_list

细看了一下 splice_after函数实现发现,在没有开启DEBUG宏的情况下,其内部并没有操作形参传入的forward_list参数,而只是对迭代器pos2、pos1之右(后)所指内容进行了拼接。即常规的单向链表拼接的指针操作。

示例代码:

#include <iostream>
#include <forward_list>
using namespace std;int main()
{forward_list<int> t1{1,2,3,4,5};forward_list<int> t2{ 97,98,99};auto pos1 = t1.before_begin();for (auto pb1 = t1.begin(); pb1 != t1.end(); ++pb1,++pos1){if (*pb1 == 3){break;}}auto pos2 = t2.before_begin();for (auto pb2 = t2.begin(); pb2 != t2.end(); ++pb2, ++pos2){if (*pb2 == 99){break;}}t1.splice_after(pos2, t2, pos1);//t2.splice_after(pos2, t1, pos1);//forward_list<int> t3;//t3.splice_after(pos2, forward_list<int>(), pos1);//t2.splice_after(pos2, t1, t1.before_begin());//t2.splice_after(pos2, t1, t1.begin());for (;;);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/537671.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EditText不显示系统键盘,可用来显示自定义的键盘

系统键盘 包含普通键盘和现在很多ROM定制的密码安全键盘 调用已下方法即可解决: https://developer.android.google.cn/reference/android/widget/TextView#setShowSoftInputOnFocus(boolean) 但是,此方法是API 21Android 5.0加入的, 所以为了兼容低版本, 建议使用已下方法: p…

springboot整合最新版minio和minio的安装(完整教程,新人必看)

概述&#xff1a;这种东西&#xff0c;多写点&#xff0c;方便以后自己使用 目录 第一步&#xff1a;docker安装配置minio 第一步&#xff1a;拉取镜像 第二步&#xff1a;创建用于存储MinIO数据的卷 如果是最新版minio直接就使用最后的那个命令创建容器 第三步&#xff…

RabbitMQ 模拟实现【一】:需求分析

文章目录 消息队列消息队列消息队列的作用图解生产者消费者模型BrokerSever 内部涉及的关键概念交换机功能消费的实现方式数据存储方式网络通信消息应答模式 消息队列模拟实现Gitee网址 消息队列 采用 SpringBoot 框架实现 消息队列 通常说的消息队列&#xff0c;简称MQ&am…

json展示curl 请求接口返回结果

使用curl发送请求并将返回结果以JSON格式展示&#xff0c;通常需要确保请求的响应本身就是JSON格式。可以结合jq这个JSON处理工具来格式化输出。 首先要安装jq 工具。 Linux发行版中&#xff0c;你可以使用包管理器来安装它。 sudo yum install jq # 对于CentOS/RHEL 安装成…

多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测

多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测 目录 多维时序 | Matlab实现VMD-CNN-GRU变分模态分解结合卷积神经网络门控循环单元多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现VMD-CN…

Unity Timeline学习笔记(3) - SignalTrack信号轨道和自定义带参数的Marker信号和轨道

信号轨道&#xff0c;顾名思义就是运行到某处发送一个信号。 普通用法 普通用法就是没有任何封装的&#xff0c;个人感觉特别难用&#xff0c;但是有必要理解一下工作原理。 添加信号 我们添加一个信号资源 生成后可以看到资源文件&#xff0c;这个是可以拖到SignalTrack上…

【Unity】persistentDataPath、streamingAssetsPath和dataPath

介绍 我们在用Unity进行开发时&#xff0c;资源路径是我们最常用到的&#xff0c;下面我就来简单介绍一下几种常用的路径。 1.dataPath dataPath是包含游戏数据文件夹的路径&#xff0c;是app程序包安装路径 Windows: xxx /Assets &#xff08;如下图&#xff09; Mac: xxx…

opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9

文章目录 1、YOLOv9 介绍2、测试2.1、官方Python测试2.1.1、正确的脚本2.2、Opencv dnn测试2.2.1、导出onnx模型2.2.2、c测试代码 2.3、测试统计 3、自定义数据及训练3.1、准备工作3.2、训练3.3、模型重参数化 1、YOLOv9 介绍 YOLOv9 是 YOLOv7 研究团队推出的最新目标检测网络…

MYSQL 是如何保证binlog 和redo log同时提交的?

MYSQL 一个事务在提交的时候能够保证binlog和redo log是同时提交的&#xff0c;并且能在宕机恢复后保持binlog 和redo log的一致性。 先来看看什么是redo log 和binlog&#xff0c;以及为什么要保持它们的一致性。 什么是redo log&#xff0c;binlog redo log是innodb引擎层…

Spring启动“--”设置参数没生效

现象 在idea中启动SpringBoot项目时&#xff0c;使用“--”设置的启动参数没有生效&#xff0c;如修改端口号“--server.port8082” 原因 排查发现是因为在使用SpringApplication.run启动项目时&#xff0c;没有将args参数传入run方法。 修复方案 SpringApplication.run参数中…

【Sql】MVCC有关问题,以及锁,日志和主从复制原理

目录 MVCC 解决什么问题? 实现原理 隐式字段 undo log Read View(读视图) InnoDB 对 MVCC 的实现 锁 分类 锁升级&#xff1f; InnoDB 的行锁&#xff1f; 死锁避免&#xff1f; 乐观锁和悲观锁 日志 主从复制原理 主从复制的作用 MySQL主从复制解决的问题 涉…

面试经典-16- 环形链表

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…