Skip to Content
C++程序设计语言(第4部分:标准库)(原书第4版)
book

C++程序设计语言(第4部分:标准库)(原书第4版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
6h 57m
Chinese
Pearson
Content preview from C++程序设计语言(第4部分:标准库)(原书第4版)

32.3 策略实参

大多数标准库算法都有两个版本:

·一个“普通”版本使用常规操作(如<和==)完成其任务

·另一个版本接受关键操作参数

例如:

这极大地提高了标准库的灵活性和应用范围。

一个算法的两个常用版本可以实现为两个(重载的)函数模板或是带默认实参的单一函数模板。例如:

如果使用函数指针,就能察觉两个函数和带默认实参的单一函数间的差异。不过,还是将标准库算法的很多版本简单看作“带默认谓词的版本”比较好,这能将你需要记忆的函数模板的数量减少差不多一半。

在某些情况下,实参既可以解释为谓词,也可以解释为值。例如:

一般而言,编译器无法消除这类代码的二义性,而且即使是编译器能消除二义性的情况,程序员也会感到困惑。

为了简化程序员的任务,标准库一般使用后缀_if指出算法接受一个谓词。使用两个名字来区分不同版本是为了减少二义性和困扰。考虑下面的例子:

某些作为实参传递给算法的操作会修改所施用的元素(例如,传递给for_each()的一些操作;见32.4.1节),但大多数操作还是谓词(例如传递给sort()的比较对象)。除非特别说明,我们假定传递给算法的策略实参不会修改元素。特别是,不要试图用谓词修改元素: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

算法精讲视频课程:24篇系列讲座

算法精讲视频课程:24篇系列讲座

罗伯特·塞奇威克, 凯文·韦恩(Kevin Wayne)
可编程网络自动化

可编程网络自动化

Jason Edelman, Scott S. Lowe, Matt Oswalt
C语言核心技术(原书第2版)

C语言核心技术(原书第2版)

Peter Prinz, Tony Crawford
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111544395