【C++】C++ Primer-第五版-10.6 特定容器算法

C++Primer第五版 习题答案 目录 C++Primer第五版 习题答案 本文当作我学习C++的一个记录,这里的习题答案并不是标准答案,仅仅是我的理解,如有错误,请大家指出,谢谢! 我参考的文章会在文末列出,谢谢大家。 第一章 ... 阅读详情

一个读书笔记-带有示例

关于中文P369页中提到的list使用merge函数时两个list必须为有序的解释

1.引言

      与其他容器不同,链表类型list和 forward_list定义了几个成员函数形式的算法,如表10.6所示。特别是,它们定义了独有的sort、merge、remove、reverse和unique。通用版本的sort要求随机访问迭代器,因此不能用于list和 forward_list,因为这两个类型分别提供双向迭代器和前向迭代器。

       链表类型定义的其他算法的通用版本可以用于链表,但代价太高。这些算法需要交换输入序列中的元素。一个链表可以通过改变元素间的链接而不是真的交换它们的值来快速“交换”元素。因此,这些链表版本的算法的性能比对应的通用版本好得多。
 

最佳实践:对于list和forward list,应该优先使用成员函数版本的算法而不是通用算法。

2.list 和 forward_list成员函数版本的常见算法

               表格10.6   list 和 forward_list成员函数版本的算法(这些操作都返回void)
lst.merge(lst2)将来自lst2的元素合并入lst。lst和lst2都必须是有序的(这个是指只有当lst和lst2是有序的,merge之后才也是有序的,并不是说不能merge了)。元素将从lst2中删除。在合并之后,lst2变为空。第一个版本使用<运算符:第二个版本使用给定的比较操作
lst.merge(lst2,comp)
lst.remove(val)调用erase删除掉与给定值相等(==)或令一元谓词为真的每个元素
lst.remove_if(pred)
lst.reverse()反转lst中元素的顺序
lst.sort()使用<或给定比较操作排序元素
lst.sort(cmp)
lst.unique()调用erase删除同一个值的连续拷贝。第一个版本使用==;第二个版本使用给定的二元谓词
lst.unique(pred)

3.链表数据结构所特有的算法-splice

链表类型还定义了splice算法,其描述见表10.7。此算法是链表数据结构所特有的,因此不需要通用版本。

                                         表10.7:list和 forward list的splice成员函数的参数
lst.splice(args)或flst.splice_after(args)
(p,lst2)p是一个指向lst中元素的迭代器,或一个指向flst首前位置的迭代器。函数将lst2的所有元素移动到lst中p之前的位置或是flst中p之后的位置。将元素从lst2中删除。lst2的类型必须与lst或flst相同,且不能是同一个链表
(p,lst2,p2)p2是一个指向lst2中位置的有效的迭代器。将p2指向的元素移动到lst中,或将p2之后的元素移动到flst中。lst2可以是与lst或flst相同的链表
 
(p,lst2,b,e)b和e必须表示lst2中的合法范围。将给定范围中的元素从lst2移动到lst或flst。lst2与lst(或flst)可以是相同的链表,但p不能指向给定范围中元素

4.链表的特有操作会改变容器

      多数链表特有的算法都与其通用版本很相似,但不完全相同链表特有版本与通用版本间的一个至关重要的区别是链表版本会改变底层的容器。例如,remove的链表版本会删除指定的元素。unique的链表版本会删除第二个和后继的重复元素。
     类似的,merge和splice 会销毁其参数。例如,通用版本的merge将合并的序列写到一个给定的目的迭代器;两个输入序列是不变的。而链表版本的merge 幽数会销玫给定的链表——元素从参数指定的链表中删除,被合并到调用merge 的链表对象中。在merge之后,来自两个链表中的元素仍然存在,但它们都已在同一个链表中。

 

《C++ Primer》(第五版)详细目录 《c++primer》 阅读详情

相关推荐

c++ 特定容器算法(sort,merge,reverse,remove,unique)

下面内容都是特定容器算法,也就是c++,list和forward_list特有的算法。 第一部分:成员函数算法merge(forward_list和list专用) 1.c++ primer 5th p369页上说,lst.merge(lst2) 必须lst 和lst2都是有序的,但是我自己编写程序,lst和lst2都没有顺序也是可以的,why? #include <iostream> #include <string> #include <sstream> #

digitalkee的博客 665

《C++primer》笔记:特定容器算法

C++ 特定容器算法

weixin_46266058的博客 245

C++Primer第五版——习题答案+详解(完整版)

C++Primer第五版——习题答案详解 看的也比较快,但是有很多东西确实用不上,所以很多都没有深入的探讨,但是知识点覆盖的很全面,每一道题涉及的知识点我都写上简单的解释了。 文中代码的中文注释也尽量都写上,自己皆编译通过。 水平有限,如有有误之处,希望大家不吝指教! 下面的链接是 第一章:全部题目(第一章基础较多)http:/

MISAYAONE的博客 34万+

C++Primer10.6节练习

C++Primer练习

apple_50860766的博客 206

C++Primer第五版——习题答案详解

C++Primer第五版——习题答案+详解(完整版) 原创 2016年12月21日 16:11:30 标签: C++ / 习题答案 / 大全 / 第五版 / primer / 30065 C++Primer 第五版习题答案详解 发表评论 HTML/XML objective-c Delp

Z's Palace 1万+

C++ Primer 第五版完整学习资源包下载

C++ Primer 第五版》是C++学习领域的经典权威著作,全面覆盖C++语言的核心语法与高级特性,适合具备一定编程基础的开发者系统性学习。本书从C++11标准出发,结构清晰,由浅入深,逐步引导读者掌握变量、控制流、函数、类、指针、模板等核心内容。书中不仅提供大量示例代码,还附有丰富的课后习题与完整答案,便于读者巩固知识。同时,配套资源包括中英文版本、源码示例及教学指南,极大提升了学习效率。

weixin_42465332的博客 768

《C++ Primer》第10章 10.6节习题答案

《C++ Primer》第10章 泛型算法 10.6节特定容器算法 习题答案 练习10.42:使用list代替vector重新实现10.2.3节(第343页)中的去除重复单词的程序。 【出题思路】 练习链表的特殊操作。 【解答】 本题要使用链表专用的sort和unique算法,与泛型算法的不同点有如下两点: 1.它们是以链表类的成员函数形式实现的,因此使用方式是在链表对象上调用它们,也并不需要迭代器参数指出处理的序列。 2.由于是以成员函数形式实现的,是直接操作容器而非通过迭代器访问容器元素

chenyijun的专栏 209

深入C++编程:C++ Primer 第116章源码剖析

本文还有配套的精品资源,点击获取 简介:《C++ Primer》是C++领域的经典教材,其第五版备受读者推崇。本文件名“Cpp-Primer_ch116.cpp_liquid8m5_cppprimer_c++primer_”暗示了一段与该书第116章相关的C++源代码示例,旨在帮助学习者通过编程实践掌握C++的关键概念。第116章可能覆盖C++的高级主题,包括模板、STL和...

weixin_33660045的博客 1114

特定容器算法

与其他容器不同,链表类型list与forward_list定义了几个成员函数形式的算法,如下表所示。特别是,它们定义了独有的sort、merge、remove、reverse和unique。通用版本的sort要求随机访问迭代器,因此不能用于list和forward_list,因为这两个类型分别提供双向迭代器和前向迭代器。 链表类型定义的其他算法的通用版本可以用于链表,但代价太高。这些算法需要交换...

weixin_33913377的博客 162

[Adaptive Autosar]深入理解--Time Synchronization

目录 1.TS典型应用场景 2.CP和AP时间同步对比 3.时间同步基础知识 4.TBR部分参数说明 5. TS功能说明 5.1 基本说明 5.2 时间纠正计算说明 5.3 时间验证 Time Synchronization 时间同步,后面简称TS 1.TS典型应用场景 时间同步,典型应用就是在自动驾驶领域,自动驾驶领域涉及到各个传感器的数据采集,如IMU采集当前车身姿态和运动信息,毫米波雷达-超声波雷达-环视摄像头-前视摄像头...等等传感器捕获的数据,在算法中需要精确知道每个数.

AgingMoon的博客 3997

Windows下Codex CLI binary报错排查与修复完整指南

在Windows开发环境中,命令行工具与图形界面应用的协同工作常常依赖于系统环境变量的正确配置。Codex CLI作为一款基于Node.js的智能编程命令行工具,其可执行文件(binary)的定位机制直接关系到桌面应用的正常启动。当用户执行npm更新或切换Node版本后,Codex CLI二进制文件路径可能发生漂移,从而触发“Unable to locate the Codex CLI binary”的报错。此类问题并非代码或账号异常,而是PATH路径、环境变量刷新及桌面应用缓存共同作用的结果。本文面向Wi

weixin_28718769的博客 305

Node-RED 数据处理实战手册:JSON、XML、CSV 的互转与排错

Node-RED 的数据处理,主要靠核心解析器里的一组节点完成:JSON、XML、CSV(还有 HTML、YAML),它们能把 msg 里的字符串、对象和表格数据互相转换。这篇文章不按"技巧清单"罗列,而是跟着一条数据在流程里走完全程:怎么从字符串变成对象,怎么在 XML 和 CSV 之间互转,字段对不上或坏消息出现时怎么办,最后再看怎么提速。 ## 数据入口:三步把 JSON 字符串解析成对象

gitblog_00964的博客 1058

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8971

C++ Primer 特定容器算法

专栏简介:本专栏主要面向C++初学者,解释C++的一些基本概念和基础语言特性,涉及C++标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。希望对读者有帮助!

专注于C/C++编程语言的博客,如果读者对C/C++语言有任何需要咨询的可以私信联系! 846

Qwen 三代进化全景对比:从 Qwen2.5 到 Qwen3 再到 Qwen3.5

本文对比了阿里巴巴通义千问三代大模型(Qwen2.5、Qwen3、Qwen3.5)的技术演进。18个月内,模型在架构、训练数据和能力上实现显著突破:从纯稠密结构(Qwen2.5)发展为混合注意力架构(Qwen3.5),支持语言从29种扩展至201种,并实现原生多模态融合。关键进展包括引入MoE架构、Gated DeltaNet混合注意力机制(计算效率提升10倍)、以及从独立模态到早期视觉语言联合训练的转变。模型阵容从7个通用尺寸发展为8+个混合架构,最大参数量达397B,上下文窗口扩展至256K(托管版1M

m0_47999117的博客 1万+

robomimic实验复现全流程指南:从数据集下载到训练视频生成

本文提供了RoboMimic实验复现的完整实战指南,重点解析了从数据集下载、配置文件定制到模型训练与评估的全流程。以tool_hang任务为例,详细说明了环境准备、数据获取、训练监控及视频生成等关键步骤,并针对常见问题给出了排查方案,帮助研究者高效完成机器人模仿学习实验的闭环验证。

2w3e4r5t6y的博客 1032

【c++ primer 笔记】第11章 关联容器

关联容器中的元素按关键字来保存和访问顺序容器中的元素按他们在容器中的位置来保存和访问关联容器与顺序容器许多行为相同,但是有着根本不同,不同之处反应关键字作用关联容器支持高效的关键字查找和访问关联容器包括map和set。头文件定义map和multimap在头文件 map 中,set和multiset在头文件 set 中,无序 map 和无序 set 分别在头文件 unordered_map 和 unordered_set 中。容器类型解释按关键字有序保存元素map关键数组:保存。......

小呆鸟blog 1596

基于FPGA的64点fft变换verilog开发

这精度的损失在10bits看来对最后的误差的影响是存在是不可忽略的。此后,在这思想基础上又开发了高基和分裂基等快速算法,随着数字技术的高速发展,1976年出现建立在数论和多项式理论基础上的维诺格勒傅里叶变换算法(WFTA)和素因子傅里叶变换算法。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

FPGA/MATLAB学习教程/源码/项目合作开发 1977

MCP SEP-2484 解读:以一致性测试(Conformance Tests)作为规范提案进入 Final 状态的硬性门槛

本文以 Model Context Protocol 规范仓库中的 [SEP-2484](https://link.gitcode.com/i/9973df74940664d1fbfee90a0a357365) 为骨架,系统讲解 MCP 社区如何通过"一致性测试 + 可追溯性文件(traceability file)"机制,把规范的英文散文与 SDK 的可执行实现对齐。读完本文,你将掌握:哪些 S

gitblog_01000的博客 1072

第1讲|AI产品经理全景图谱:不是“会用AI工具”,而是能对AI产品结果负责

本文从岗位本质出发,系统拆解 AI 产品经理的职责、岗位类型与能力模型,帮助读者理解 AI PM 与传统 PM 的核心差异,明确自己适合的转型方向,并建立“对 AI 产品结果负责”的产品认知。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1015

基于Simulink的雷达跟踪系统仿真(附源码)

此示例包含对雷达系统的基本特征进行建模的子系统。该模型是用于目标位置和速度检测的雷达系统的典型模型。该示例包括雷达脉冲发生器、射频发射器子系统、移动目标的 Simulink 表示、射频接收器和接收模块(Rx 模块)。

珞瑜的博客 3515

【c++ primer 笔记】第10章 泛型算法

大多数算法定义在头文件algorithm中,部分在numeric中这些算法不直接操作容器,而是操作迭代器算法不会改变容器的大小。永远不会执行容器操作大多数算法是通过遍历两个迭代器标记的一段元素来实现其功能。算法永远不会改变底层容器的大小。算法可能改变容器中保存的元素的值,也可能在容器内移动元素,但不能直接添加或者删除元素。......

小呆鸟blog 1164

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++Primer第五版——习题答案及详解

本文转自:https://blog.csdn.net/misayaaaaa/article/details/53786215第一章全部题目(第一章基础较多)http://blog.csdn.net/misayaaaaa/article/details/53200001第二章1~10题:http://blog.csdn.net/misayaaaaa/article/details/532007731...

快乐的小鱼123 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++ Primer(第五版)|练习题答案与解析(第九章:顺序容器)

C++ Primer(第五版)|练习题答案与解析(第九章:顺序容器) 本博客主要记录C++ Primer(第五版)中的练习题答案与解析。 参考:C++ Primer C++ Primer 练习题9.1 对于下面的程序任务,vector, deque和list哪种容器最为合适?解释你选择的理由。如果没有哪一种容器优于其它容器,也请解释理由。 (a)读取固定数量的单词,将它们按字典序插入到容器中。...

qq_24739717的博客 1242

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++ Primer(第五版)10.2.2--10.2.3节练习

10.6 #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> ivec = {1, 2, 3, 4, 5}; fill_n(ivec.begin(), ivec.size(...

wlli1985的博客 566
上一篇: 【HTTPS权威指南】第一章SSL,TLS和密码学-脑图
下一篇: 依赖libcurl库实现sftp的下载功能
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值