C++ 非变异算法

非变异算法总结与分析

1. 什么是非变异算法

非变异算法是指那些不会改变容器内容的算法。这些算法主要用于查询、计数和比较等操作,确保在操作过程中容器的状态保持不变。非变异算法的优势在于它们可以安全地在不改变数据的情况下进行数据处理。

2. 四类函数讲解

以下是根据您提供的函数列表进行的详细讲解,包括每个函数的功能、代码实例和运行结果。

1. 循环函数
for_each
  • 功能: 遍历容器中的每个元素,并对每个元素执行指定的操作。

  • 原型:

    template<class InputIt, class UnaryFunc>
    UnaryFunc for_each(InputIt first, InputIt last, UnaryFunc f);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>void print(int n) {std::cout << n << " ";
    }int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::for_each(vec.begin(), vec.end(), print);return 0;
    }
    
  • 运行结果:

    1 2 3 4 5 
    
2. 查询函数
find
  • 功能: 在指定范围内查找第一个等于给定值的元素。

  • 原型:

    template<class InputIt, class T>
    InputIt find(InputIt first, InputIt last, const T& value);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};auto it = std::find(vec.begin(), vec.end(), 3);if (it != vec.end()) {std::cout << "Found: " << *it << std::endl; // 输出: Found: 3}return 0;
    }
    
  • 运行结果:

    Found: 3
    
find_if
  • 功能: 在指定范围内查找第一个满足指定条件的元素。

  • 原型:

    template<class InputIt, class UnaryPredicate>
    InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>bool is_even(int n) {return n % 2 == 0;
    }int main() {std::vector<int> vec = {1, 3, 5, 4, 2};auto it = std::find_if(vec.begin(), vec.end(), is_even);if (it != vec.end()) {std::cout << "First even number: " << *it << std::endl; // 输出: First even number: 4}return 0;
    }
    
  • 运行结果:

    First even number: 4
    
find_first_of
  • 功能: 查找在范围内第一个出现在另一个范围中的元素。

  • 原型:

    template<class InputIt1, class InputIt2>
    InputIt1 find_first_of(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>int main() {std::vector<int> vec1 = {1, 2, 3, 4, 5};std::vector<int> vec2 = {3, 6, 7};auto it = std::find_first_of(vec1.begin(), vec1.end(), vec2.begin(), vec2.end());if (it != vec1.end()) {std::cout << "First match: " << *it << std::endl; // 输出: First match: 3}return 0;
    }
    
  • 运行结果:

    First match: 3
    
adjacent_find
  • 功能: 查找在范围内第一个相邻的相等元素。

  • 原型:

    template<class ForwardIt>
    ForwardIt adjacent_find(ForwardIt first, ForwardIt last);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>int main() {std::vector<int> vec = {1, 2, 2, 4, 5};auto it = std::adjacent_find(vec.begin(), vec.end());if (it != vec.end()) {std::cout << "First adjacent equal: " << *it << std::endl; // 输出: First adjacent equal: 2}return 0;
    }
    
  • 运行结果:

    First adjacent equal: 2
    
find_end
  • 功能: 在一个序列中查找另一个序列最后一次出现的位置。

  • 原型:

    template<class ForwardIt1, class ForwardIt2>
    ForwardIt1 find_end(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, ForwardIt2 last2);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>int main() {std::vector<int> vec1 = {1, 2, 3, 2, 3};std::vector<int> vec2 = {2, 3};auto it = std::find_end(vec1.begin(), vec1.end(), vec2.begin(), vec2.end());if (it != vec1.end()) {std::cout << "Last occurrence found at: " << *it << std::endl; // 输出: Last occurrence found at: 3}return 0;
    }
    
  • 运行结果:

    Last occurrence found at: 3
    
search
  • 功能: 查找一个序列中是否存在另一序列。

  • 原型:

    template<class ForwardIt1, class ForwardIt2>
    ForwardIt1 search(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, ForwardIt2 last2);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>int main() {std::vector<int> vec1 = {1, 2, 3, 4, 5};std::vector<int> vec2 = {3, 4};auto it = std::search(vec1.begin(), vec1.end(), vec2.begin(), vec2.end());if (it != vec1.end()) {std::cout << "Found sequence starting at: " << *it << std::endl; // 输出: Found sequence starting at: 3}return 0;
    }
    
  • 运行结果:

    Found sequence starting at: 3
    
search_n
  • 功能: 在一个序列中查找连续的 n 个相同的元素。

  • 原型:

    template<class ForwardIt, class T>
    ForwardIt search_n(ForwardIt first, ForwardIt last, size_t count, const T& value);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>int main() {std::vector<int> vec = {1, 2, 3, 3, 3, 4, 5};auto it = std::search_n(vec.begin(), vec.end(), 3, 3);if (it != vec.end()) {std::cout << "Found 3 in a row starting at: " << *it << std::endl; // 输出: Found 3 in a row starting at: 3}return 0;
    }
    
  • 运行结果:

    Found 3 in a row starting at: 3
    
3. 计数函数
count
  • 功能: 统计容器中等于指定值的元素的次数。

  • 原型:

    template<class InputIt, class T>
    size_t count(InputIt first, InputIt last, const T& value);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>int main() {std::vector<int> vec = {1, 2, 2, 3, 4, 2};size_t countOfTwos = std::count(vec.begin(), vec.end(), 2);std::cout << "Count of 2s: " << countOfTwos << std::endl; // 输出: Count of 2s: 3return 0;
    }
    
  • 运行结果:

    Count of 2s: 3
    
count_if
  • 功能: 统计满足指定条件的元素的次数。

  • 原型:

    template<class InputIt, class UnaryPredicate>
    size_t count_if(InputIt first, InputIt last, UnaryPredicate p);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>bool is_even(int n) {return n % 2 == 0;
    }int main() {std::vector<int> vec = {1, 2, 3, 4, 5};size_t evenCount = std::count_if(vec.begin(), vec.end(), is_even);std::cout << "Count of even numbers: " << evenCount << std::endl; // 输出: Count of even numbers: 2return 0;
    }
    
  • 运行结果:

    Count of even numbers: 2
    
4. 比较函数
equal
  • 功能: 比较两个序列是否相同。

  • 原型:

    template<class InputIt1, class InputIt2>
    bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>int main() {std::vector<int> vec1 = {1, 2, 3};std::vector<int> vec2 = {1, 2, 3};bool areEqual = std::equal(vec1.begin(), vec1.end(), vec2.begin());std::cout << "Are the two vectors equal? " << (areEqual ? "Yes" : "No") << std::endl; // 输出: Yesreturn 0;
    }
    
  • 运行结果:

    Are the two vectors equal? Yes
    
mismatch
  • 功能: 找到两个序列中第一个不匹配的元素。

  • 原型:

    template<class InputIt1, class InputIt2>
    std::pair<InputIt1, InputIt2> mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2);
    
  • 示例代码:

    #include <iostream>
    #include <vector>
    #include <algorithm>int main() {std::vector<int> vec1 = {1, 2, 3, 4};std::vector<int> vec2 = {1, 2, 0, 4}; // 0 是不匹配的auto result = std::mismatch(vec1.begin(), vec1.end(), vec2.begin());if (result.first != vec1.end()) {std::cout << "First mismatch: " << *(result.first) << " and " << *(result.second) << std::endl; // 输出: 3 and 0}return 0;
    }
    
  • 运行结果:

    First mismatch: 3 and 0
    

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

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

相关文章

阿里云:aliyun-cli和ali-instance-cli

概念&#xff1a; 这篇文章只是来澄清一下这俩“cli"之间的区别和联系&#xff1a; aliyun cli 和 ali-instance-cli 都是阿里云提供的命令行工具&#xff0c;但它们的功能和使用场景有所不同。 1. aliyun cli 是一个通用的阿里云命令行接口工具&#xff0c;它允许用户…

opencv Mat To Heif

高效率图像文件格式&#xff08;英语&#xff1a;High Efficiency Image File Format, HEIF&#xff1b;也称高效图像文件格式&#xff09;是一个用于单张图像或图像序列的文件格式。它由运动图像专家组&#xff08;MPEG&#xff09;开发&#xff0c;并在MPEG-H Part 12&#x…

内存管理面试常问

为什么要有虚拟内存&#xff1f; 虚拟内存 如果你是电⼦相关专业的&#xff0c;肯定在⼤学⾥捣⿎过单⽚机。 单⽚机是没有操作系统的&#xff0c;所以每次写完代码&#xff0c;都需要借助⼯具把程序烧录进去&#xff0c;这样程序才能跑起来。 另外&#xff0c; 单⽚机的 CPU …

PostgreSQL DISTINCT 关键字的使用与优化

PostgreSQL DISTINCT 关键字的使用与优化 PostgreSQL 是一种功能强大的开源对象关系数据库管理系统,广泛用于各种应用场景。在处理数据库查询时,我们经常需要从表中检索唯一的记录集合,这时就会用到 DISTINCT 关键字。本文将详细介绍 PostgreSQL 中 DISTINCT 关键字的使用方…

LSM Tree 底层设计理念

场景&#xff1a;设计一个海量读写的的kv数据库&#xff0c;优先保证写入速度&#xff0c;但是读取速度也不能很慢 因为海量数据存储&#xff0c;不能使用内存&#xff0c;得存到文件里。 Q&#xff1a;对已经落盘的文件&#xff0c;怎么根据key修改value A&#xff1a;读取文件…

Debezium日常分享系列之:Debezium Engine

Debezium日常分享系列之&#xff1a;Debezium Engine 依赖打包项目在代码中输出消息格式消息转换消息转换谓词高级记录使用引擎属性异步引擎属性数据库模式历史属性处理故障 Debezium连接器通常通过部署到Kafka Connect服务来运行&#xff0c;并配置一个或多个连接器来监视上游…

MongoDB分片集群搭建及扩容

分片集群搭建及扩容 整体架构 环境准备 3台Linux虚拟机&#xff0c;准备MongoDB环境&#xff0c;配置环境变量。一定要版本一致&#xff08;重点&#xff09;&#xff0c;当前使用 version4.4.9 配置域名解析 在3台虚拟机上执行以下命令&#xff0c;注意替换实际 IP 地址 e…

Pynsist 打包应用 和 PyWebIO 构建Web 应用

Pynsist&#xff1a;一键打包Python 应用代码为Windows 安装程序。 项目地址&#xff1a; https://github.com/takluyver/pynsist PyWebIO&#xff1a;为Python 开发者提供了一种快速、简洁的方式来创建Web 应用&#xff0c;无需学习前端技术 项目地址&#xff1a;https://g…

【HarmonyOS】层级轮播卡片效果

【HarmonyOS】层级轮播卡片效果 一、功能效果&#xff1a; 1.上下堆叠由大到小的卡片层叠效果。 2.上层卡片可手势左右滑动&#xff0c;自动左滑动。 3.三层卡片随滑动&#xff0c;内容进行依次切换。 二、开发思路 【完整代码见章节三】 1.最上层使用swiper进行轮播效果…

Python_Flask02

所有人都不许学Java了&#xff0c;都来学Python&#xff01; 如果不来学的话请网爆我的老师 连接前的准备 安装pymysql 和 flask_sqlalchemy&#xff0c;安装第三下面两个所需要的包才能连接上数据库 pip install pymysql pip install flask_sqlalchemy pymysql是一个Pyth…

实验13 使用预训练resnet18实现CIFAR-10分类

1.数据预处理 首先利用函数transforms.Compose定义了一个预处理函数transform&#xff0c;里面定义了两种操作&#xff0c;一个是将图像转换为Tensor&#xff0c;一个是对图像进行标准化。然后利用函数torchvision.datasets.CIFAR10下载数据集&#xff0c;这个函数有四个常见的…

区块链概念 Web 3.0 实操

1. Web 3.0 概述 1.1 定义与背景 Web 3.0&#xff0c;也称为第三代互联网&#xff0c;是一个新兴的概念&#xff0c;它代表着互联网的未来发展和演进方向。Web 3.0的核心理念是去中心化、用户主权和智能化。这一概念的提出&#xff0c;旨在解决Web 2.0时代中用户数据隐私泄露…

linux下使用gdb运行程序,查看程序崩溃原因

1.什么是gdb? gdb 是 GNU Debugger 的缩写&#xff0c;是一个功能强大的用于调试程序的开源调试器工具。它可以帮助开发人员诊断和解决程序中的错误、跟踪程序执行过程、查看变量的值等。gdb 支持多种编程语言&#xff0c;包括 C、C、Objective-C、Fortran 等&#xff0c;并可…

鸿蒙arkts怎么打印一个方法的调用堆栈

做鸿蒙开发的时候&#xff0c;也想看一下一个方法到底是哪里调用的&#xff0c;工程太大&#xff0c;断点太麻烦&#xff0c;可以加堆栈日志。 在你的方法中加上这两句&#xff0c;就可以跟到堆栈日志 let err new Error() console.log(>>>>>>err.stack) …

Elasticsearch scroll 之滚动查询

Elasticsearch scroll 之滚动查询 Elasticsearch 的 Scroll API 是一种用于处理大规模数据集的机制&#xff0c;特别是在需要从索引中检索大量数据时。通常情况下&#xff0c;Elasticsearch 的搜索请求会有一个结果集大小的限制 (fromsize 的检索数量默认是 10,000 条记录)&am…

【漏洞复现】网动统一通信平台(ActiveUC)接口iactiveEnterMeeting存在信息泄露漏洞

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 @TOC 一、漏洞概述 1.1漏洞简介 漏洞名称:网动统一通信平台(ActiveUC)接口iactiveEnterMeeting存在信息泄露漏洞漏洞编号:无漏洞类型:信息泄露漏洞威胁等级:高危影…

掌握小程序地理位置服务插件,让用户体验再升级

在小程序开发中&#xff0c;地理位置服务插件扮演着至关重要的角色&#xff0c;它们不仅能够帮助开发者轻松获取用户的地理位置信息&#xff0c;还能够基于位置数据提供丰富的功能&#xff0c;如地图展示、周边搜索、路径规划等。 一、插件的基本概念与引入 插件定义&#xf…

IDE如何安装插件实现Go to Definition

项目背景 框架&#xff1a;Cucumber Cypress 语言&#xff1a;Javascript IDE&#xff1a;vscode 需求 项目根目录cypress-automation的cypress/integration是测试用例的存放路径&#xff0c;按照不同模块不同功能创建了很多子目录&#xff0c;cucumber测试用例.feature文…

如何通过 Windows 自带的启动管理功能优化电脑启动程序

在日常使用电脑的过程中&#xff0c;您可能注意到开机后某些程序会自动运行。这些程序被称为“自启动”或“启动项”&#xff0c;它们可以在系统启动时自动加载并开始运行&#xff0c;有时甚至在后台默默工作。虽然一些启动项可能是必要的&#xff08;如杀毒软件&#xff09;&a…

探索自然语言处理奥秘(NLP)

摘要 自然语言处理&#xff08;NLP&#xff09;是人工智能领域的一个重要分支&#xff0c;它致力于使计算机能够理解、解释和生成人类语言。这项技术让机器能够阅读文本、听懂语音&#xff0c;并与人类进行基本的对话交流。 通俗理解 自然语言处理&#xff08;NLP&#xff09…