C++ Primer 第五版 中文版 阅读笔记 + 个人思考

C++ Primer 第五版 中文版 阅读笔记 + 个人思考

  • 第 10 章 泛型算法
    • 10.1 概述
    • 练习10.1
    • 练习10.2

第 10 章 泛型算法

泛型的体现:容器类型(包括内置数组),元素类型,元素操作方法。
顺序容器定义的操作:insert,erase,back,front,empty,begin_iterator,end_next_iterator。

10.1 概述

算法在容器泛型上的实现:遍历由两个迭代器指定的一个元素范围进行操作。
算法依赖于元素类型支持的操作,允许我们自定义操作代替默认的运算符。

代码演示:find操作的是迭代器,可以用于任何容器。

#include <iostream>  
#include <vector>  
#include <list>  
#include <set>  
#include <map>  
#include <algorithm>  int main() {// 1. 在一个向量中查找元素  std::vector<int> vec = { 1, 2, 3, 4, 5 };int valToFind = 3;if (std::find(vec.begin(), vec.end(), valToFind) != vec.end()) {std::cout << "Found " << valToFind << " in vector." << std::endl;}else {std::cout << valToFind << " not found in vector." << std::endl;}// 2. 在一个列表中查找元素  std::list<int> lst = { 1, 2, 3, 4, 5 };valToFind = 4;if (std::find(lst.begin(), lst.end(), valToFind) != lst.end()) {std::cout << "Found " << valToFind << " in list." << std::endl;}else {std::cout << valToFind << " not found in list." << std::endl;}// 3. 在一个集合中查找元素(集合中的元素是唯一的,所以只会找到一个匹配项)  std::set<int> s = { 1, 2, 3, 4, 5 };valToFind = 3;if (std::find(s.begin(), s.end(), valToFind) != s.end()) {std::cout << "Found " << valToFind << " in set." << std::endl;}else {std::cout << valToFind << " not found in set." << std::endl;}// 4. 在一个映射中查找元素(键值对)  std::map<int, std::string> m = { {1, "one"}, {2, "two"}, {3, "three"} };auto mit = std::find(m.begin(), m.end(), std::make_pair(2, "two"));if (mit != m.end()) {std::cout << "Found " << mit->first << " in map with value: " << mit->second << std::endl;}else {std::cout << valToFind << " not found in map." << std::endl;}return 0;
}

运行结果:
运行结果

代码演示:find函数用于内置数组。

#include <iostream>  
#include <algorithm>int main() 
{int array[5] = { 1,2,3,4,5 };int val = 4;if (std::end(array) != std::find(std::begin(array), std::end(array), val)){std::cout << val << " is present" << std::endl;}else{std::cout << val << " is not present" << std::endl;}if (array + 2 != std::find(array, array + 2, val)){std::cout << val << " is present" << std::endl;}else{std::cout << val << " is not present" << std::endl;}return 0;
}

运行结果:
运行结果

算法运行于迭代器之上,不会修改容器大小。
存在插入器 inserter :赋值时,在底层容器上执行插入操作。

练习10.1

代码演示:

#include <iostream>  
#include <algorithm>
#include <vector>int main() 
{std::vector<int> vi = { 1,2,3,3,3,4,5 };int val = 3;std::cout << val << " count: " << std::count(vi.begin(), vi.end(), val) << std::endl;val = 2;std::cout << val << " count: " << std::count(vi.begin(), vi.end(), val) << std::endl;return 0;
}

运行结果:
运行结果

练习10.2

代码演示:

#include <iostream>  
#include <algorithm>
#include <vector>
#include <string>int main() 
{std::vector < std::string > vs = { "hello","hello","hello","world","world" };std::string val = "hello";std::cout << val << " count: " << std::count(vs.begin(), vs.end(), val) << std::endl;val = "world";std::cout << val << " count: " << std::count(vs.begin(), vs.end(), val) << std::endl;return 0;
}

运行结果:
运行结果

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

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

相关文章

Domain Adaptation 相关介绍

1. Transfer Learning Transfer learning 是机器学习的一个分支, 而 Domain adpatation 是 transfer learning 的一个分支. 在 transfer learning 中有两个概念: source domain (源域) 和 target domain (目标域). 源域中往往有丰富的信息, 比如有大量的数据点和其真实的标签;…

基于OpenCV的图像缩放

基础概念 缩放是将图像的尺寸变小或变大的过程&#xff0c;即减少或增加原图像数据的像素个数&#xff0c;或者说通过增加或删除像素点来改变图像的尺寸&#xff1b; 基本原理&#xff1a;将分辨率&#xff08;图片尺寸&#xff09;为(w,h)的图像&#xff0c;缩放后其图像分辨…

CVE-2023-36025 Windows SmartScreen 安全功能绕过漏洞

CVE-2023-36025是微软于11月补丁日发布的安全更新中修复Windows SmartScreen安全功能绕过漏洞。攻击者可以通过诱导用户单击特制的URL来利用该漏洞&#xff0c;对目标系统进行攻击。成功利用该漏洞的攻击者能够绕过Windows Defender SmartScreen检查及其相关提示。该漏洞的攻击…

代码随想录算法训练营第二十八天 | 93.复原IP地址、78.子集、90.子集II

93.复原IP地址 题目链接&#xff1a;93.复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1"…

小程序系列--1.小程序入门

一、小程序简介 1. 小程序与普通网页开发的区别 1. 运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 2. API 不同 由于运行环境的不同&#xff0c;所以小程序中&#xff0c; 无法调用 DOM 和 BOM 的 API。 但是&#xff0c;小程序中可以调用微信环境提供的各种 …

【办公】百度网盘 Linux命令行方式使用

安装&#xff1a; pip install bypy登录&#xff1a; bypy info # 会给网页链接&#xff0c;用浏览器打开链接后会有一个授权码&#xff0c;复制授权码后粘贴到这里回车上传文件&#xff1a; bypy upload ./data下载文件&#xff1a; bypy downdir /运行时添加-v参数&#…

Nginx快速入门:worker、master进程的作用和热部署原理(十)

0. 引言 我们通过查询nginx进程&#xff0c;可以发现nginx有两个进程&#xff1a;worker和master。一个程序启动了两个进程&#xff0c;那么这两个进程的作用和区别是什么呢&#xff1f;nginx又是如何利用这两个进程进行工作的呢&#xff1f;nginx不停机热部署又是如何实现的&…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷⑤

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷5 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷5 模块一 …

普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)

简介 主芯片STM32F103ZET6&#xff0c;读取内部温度其他知识 内部温度所在ADC通道 温度计算公式 V25跟Avg_Slope值 参考文档 stm32f103ze.pdf 电压计算公式 Vout Vref * (D / 2^n) 其中Vref代表参考电压&#xff0c; n为ADC的位数&#xff0c; D为ADC输入的数字信号。 实现…

用实例证明函数是go语言的一等公民

概述 在软件编程语言设计中&#xff0c;如果一个实体支持所有通常对其他实体可用的操作&#xff0c;那么这个实体就被称为“一等公民”&#xff08;first-class functions&#xff09;。这些操作通常包括作为参数传递、从函数返回、修改并分配给变量等。很多编程语言都实现了将…

【数据库】MySQL锁

一、锁的基本概念 1、锁的定义 锁是协调多个进程或线程并发访问数据库资源的一种机制。 MySQL中的锁是在服务器层或者存储引擎层实现的&#xff0c;保证了数据访问的一致性与有效性。但加锁是消耗资源的&#xff0c;锁的各种操作&#xff0c;包括获得锁、检测锁是否已解除、…