C++ primer plus 第16章string 类和标准模板库, 算法的通用特征

C++ primer plus 第16章string 类和标准模板库, 算法的通用特征

C++ primer plus 第16章string 类和标准模板库, 算法的通用特征

文章目录

  • C++ primer plus 第16章string 类和标准模板库, 算法的通用特征
  • 16.6.2 算法的通用特征


16.6.2 算法的通用特征

正如您多次看到的,STL函数使用迭代器和迭代器区间。从函数原型可知有关迭代器的假设。例如,copy()函数的原型如下:

template<class InputIterator,class utputIterator>
OutputIterator copy(InputIterator first,InputIterator last,
OutputIterator result);

因为标识符 Inputlterator 和 Outputlterator 都是模板参数,所以它们就像T和U一样。然而,STL 文档使用模板参数名称来表示参数模型的概念。因此上述声明告诉我们,区间参数必须是输入迭代器或更高级别的迭代器,而指示结果存储位置的选代器必须是输出选代器或更高级别的选代器。
对算法进行分类的方式之一是按结果放置的位置进行分类。有些算法就地完成工作,有些则创建拷贝。例如,在 sort()函数完成时,结果被存放在原始数据的位置上,因此,sort()是就地算法(in-place algorithm);而 copy()函数将结果发送到另一个位置,所以它是复制算法(copying algorithm)。transform()函数可以以这两种方式完成工作。与copy()相似,它使用输出迭代器指示结果的存储位置:与copy()不同的是,transform()允许输出迭代器指向输入区间,因此它可以用计算结果覆盖原来的值。
有些算法有两个版本:就地版本和复制版本。STL的约定是,复制版本的名称将以copy结尾。复制版本将接受一个额外的输出迭代器参数,该参数指定结果的放置位置。例如,函数replace()的原型如下:

template<class ForwardIterator,classT>void replace(ForwardIterator first,ForwardIterator last,const T& old value,const T& new value);

它将所有的 old value 替换为new value,这是就地发生的。由于这种算法同时读写容器元素,因此迭代器类型必须是ForwardIterator 或更高级别的。复制版本的原型如下:

template<class InputIterator,class OutputIterator, class T>
OutputIterator replace copy(InputIterator first, InputIterator last,OutputIterator result,const T& old value,const T& new value);

在这里,结果被复制到result 指定的新位置,因此对于指定区间而言,只读输入迭代器足够了注意,replace copy()的返回类型为 Outputlterator。对于复制算法,统一的约定是:返回一个迭代器
该迭代器指向复制的最后一个值后面的一个位置。另一个常见的变体是:有些函数有这样的版本,即根据将函数应用于容器元素得到的结果来执行操作。这些版本的名称通常以 f结尾。例如,如果将函数用于旧值时,返回的值为true,则replace if()将把旧值替换为新的值。下面是该函数的原型:

template<class ForwardIterator,class Predicate class T>
void replace_if(ForwardIterator first,ForwardIterator last,Predicate pred,const T& new value);

如前所述,谓词是返回 bool值的一元函数。还有一个replace_copy_if()版本,您不难知道其作用和原型。
与 Imnputlterator 一样,Predicate 也是模板参数名称,可以为T或U。然而,STL选择用 Predicate 来提醒用户,实参应模拟 Predicate 概念。同样,STL使用诸如 Generator和 BinaryPredicate 等术语来指示必须模拟其他函数对象概念的参数。请记住,虽然文档可指出迭代器或函数符需求,但编译器不会对此进行检查。如果您使用了错误的迭代器,则编译器试图实例化模板时,将显示大量的错误消息。

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

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

相关文章

掌握SQL Server的PowerShell魔法:自动化数据库管理的艺术

掌握SQL Server的PowerShell魔法&#xff1a;自动化数据库管理的艺术 SQL Server与PowerShell的结合为数据库管理员(DBA)提供了一种强大的自动化数据库管理工具。通过PowerShell&#xff0c;可以执行复杂的数据库任务&#xff0c;从简单的查询到复杂的数据迁移和备份策略的实现…

Python接口自动化测试框架(实战篇)-- 数据库操作MySQL

文章目录 一、前言二、数据库什么是数据验证为什么需要操作数据库做数据验证?现在回到怎样做数据验证的问题上来 三、[PyMSQL](https://pypi.org/project/pymssql/)pymysql如何操作数据库实际应用 四、总结 一、前言 说起数据库的操作&#xff0c;咱们应该保持一颗敬畏的心&a…

Ubuntu安装terminator教程

Terminator 是一个高级的终端仿真器,专为 Linux 和 Unix 系统设计。它的主要特点是提供了丰富的多窗口和多标签功能,使用户能够在一个窗口中管理多个终端会话。这对于系统管理员、开发人员以及需要同时运行多个命令行任务的用户来说,极为方便。 一、安装 1、更新包 sudo a…

【Python】计算游戏得分

一、题目 Kevin and Stuart want to play the The Minion Game. Game Rules Both players are given the san string S.Both players have to make substrings using the letters of the string S.Stuart has to make words starting with consonants.Kevin has to make wor…

Could not find a package configuration file provided by “catkin_simple“ 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04 ROS-Noetic 一、问题描述 CMake Error at /***/CMakeLists.txt:4 (find_package):By not providing "Findcatkin_simple.cmake" in CMAKE_MODULE_PATH thisp…

vue项目启动报错 vue与vue-template-compiler版本不一致

出现错误 Vue packages version mismatch: vue2.6.12 (/Users/work_ws/project/my/astar-education/astar-education-ui/node_modules/vue/dist/vue.runtime.common.js)vue-template-compiler2.6.13 (/Users/work_ws/project/my/astar-education/astar-education-ui/node_mod…

图中的最短环

2608. 图中的最短环 现有一个含 n 个顶点的 双向 图&#xff0c;每个顶点按从 0 到 n - 1 标记。图中的边由二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和 vi 之间存在一条边。每对顶点最多通过一条边连接&#xff0c;并且不存在与自身相连的顶…

Hive——UDF函数:高德地图API逆地理编码,实现离线解析经纬度转换省市区(离线地址库,非调用高德API)

文章目录 1. 需求背景数据现状业务需求面临技术问题寻求其他方案 2. 运行环境软件版本Maven依赖 3. 获取离线地址库4. Hive UDF函数实现5. 创建Hive UDF函数6. 参考 1. 需求背景 数据现状 目前业务系统某数据库表中记录了约3亿条用户行为数据&#xff0c;其中两列记录了用户触…

Java1.2标准之重要特性及用法实例(十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

SciPy 与 MATLAB 数组

SciPy 与 MATLAB 数组 SciPy 是一个开源的 Python 库,广泛用于科学和工程计算。它构建在 NumPy 数组的基础之上,提供了许多高级科学计算功能。MATLAB 是一个高性能的数值计算环境,它也使用数组作为其基础数据结构。在这篇文章中,我们将探讨 SciPy 和 MATLAB 在数组操作上的…

征服 Docker 镜像访问限制:KubeSphere v3.4.1 成功部署全攻略

近期&#xff0c;KubeSphere 社区的讨论中频繁出现关于 Docker 官方镜像仓库访问受限的问题。 本文旨在为您提供一个详细的指南&#xff0c; 展示在 Docker 官方镜像访问受限的情况下&#xff0c;如何通过 KubeKey v3.1.2 一次性成功部署 KubeSphere v3.4.1 以及 Kubernetes …

深入剖析:GaussDB与MySQL在COUNT查询中的并行化技术

引言 数据库查询性能优化是数据库管理和开发中的一个重要议题。在处理大数据量的COUNT查询时&#xff0c;传统的单线程处理方式可能无法满足现代应用的性能需求。GaussDB(for MySQL)和MySQL作为流行的数据库系统&#xff0c;它们在并行查询优化方面有着各自的策略和技术。本文…

Python批量采集某东评论,实现可视化分析

女朋友没事就喜欢网购&#xff0c;买一大堆又不用&#xff0c;总说不合适&#xff0c;为了不让她花冤枉钱&#xff0c;于是我决定用Python写一个采集商品评论的脚本&#xff0c;然后对商品进行分析&#xff0c;这样就不怕踩到坑了&#xff01; 让我们直接开始本次操作 准备工作…

Python及Jupyter-Notebook安装

来源&#xff1a; “码农不会写诗”公众号 链接&#xff1a;Python及Jupyter-Notebook安装 文章目录 01 Python安装1.1 下载安装包1.2 双击安装包&#xff0c;开始安装1.3 选择安装配置1.4 选择需要安装的Optional Feature&#xff0c;点击Next1.5 选择需要安装的Advanced Feat…

Apache DolphinScheduler Worker Task执行原理解析

大家好&#xff0c;我是蔡顺峰&#xff0c;是白鲸开源的高级数据工程师&#xff0c;同时也是Apache DolphinScheduler社区的committer和PMC member。今天我要分享的主题是《Worker Task执行原理》。 整个分享会分为三个章节&#xff1a; Apache DolphinScheduler的介绍Apache …

Python3网络爬虫开发实战(3)网页数据的解析提取

文章目录 一、XPath1. 选取节点2. 查找某个特定的节点或者包含某个指定的值的节点3. XPath 运算符4. 节点轴5. 利用 lxml 使用 XPath 二、CSS三、Beautiful Soup1. 信息提取2. 嵌套选择3. 关联选择4. 方法选择器5. css 选择器 四、PyQuery1. 初始化2. css 选择器3. 信息提取4. …

一步步理清开源路径规划导航引擎GraphHopper

一步步理清开源路径规划导航引擎GraphHopper&#xff0c;学习应用 GraphHopper简介 源码用 Java 编写&#xff0c;开发人员可以通过 Maven 轻松上手。可以用作** Java 库**来计算两个或多个点之间路线的距离、时间、逐向指示和许多道路属性。可以用作独立的 Web 服务器来计算…

CLI是命令行界面(Command-Line Interface)的缩写

CLI是命令行界面&#xff08;Command-Line Interface&#xff09;的缩写。它是一种用户界面&#xff0c;允许用户通过键盘输入文本命令来与计算机进行交互。CLI在图形用户界面&#xff08;GUI&#xff09;普及之前是最常用的用户界面类型。 CLI的特点&#xff1a; 高效性&…

CentOS下原生态安装mysql,推荐yum

mysql 是一个关系型数据库管理系统&#xff0c;是最流行的关系型数据库管理系统之一&#xff0c;本文将介绍如何在 CentOS 7.x 中安装 mysql 。 安装mysql mysql 的安装方法可以通过以下几种方式进行&#xff1a; 1、通过第三方面板安装 mysql 2、通过 yum 命令安装 mysql 3、…