C++之STL的algorithm(5)之生成算法(accumulate、fill)整理

C++之STL的algorithm(5)之生成算法(accumulate、fill)整理

注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构


C++ 的遍历算法整理

  • C++之STL的algorithm(5)之生成算法(accumulate、fill)整理
  • 一、生成算法
    • 1、accumulate累加算法
    • 2、fill 填充算法
  • 总结


提示:本文为 C++ 中accumulate、fill 的写法和举例


一、生成算法

1、accumulate累加算法

accumulate 是 <numeric> 头文件中的一个算法,用于计算容器(或其他迭代器范围)中所有元素的累计总和。它也可以接受一个二元操作符,用于自定义元素的累积方式。

参数:

first, last:输入序列的开始和结束迭代器。
init:累积求和的初始值。
binary_op(可选):二元操作符,用于计算两个元素的和。默认为 std::plus<>(),即加法操作符。

返回值:

返回一个值,表示从 init 开始的累积结果。
示例:

对于 std::vector:

#include <iostream>  
#include <vector>  
#include <numeric>  int main() {  std::vector<int> vec = {1, 2, 3, 4, 5};  int sum = std::accumulate(vec.begin(), vec.end(), 0); // 使用默认加法操作符  std::cout << "Sum of vector elements: " << sum << std::endl; // 输出:15  return 0;  
}

对于 std::map:
由于 std::map 存储的是键值对,通常我们不直接计算所有值的和,但如果你确实想这样做,你可以使用 std::accumulate 遍历 map 的值部分:

#include <iostream>  
#include <map>  
#include <numeric>  int main() {  std::map<int, int> myMap = {{1, 10}, {2, 20}, {3, 30}};  int sum = std::accumulate(myMap.begin(), myMap.end(), 0,   [](int init, const std::pair<int, int>& p) {  return init + p.second; // 累加值  });  std::cout << "Sum of map values: " << sum << std::endl; // 输出:60  return 0;  
}

对于 std::set:
通常 std::set 用于存储唯一的元素,而不常计算它们的和。但如果确实想计算 set 中所有元素的和(例如,如果 set 存储的是整数),可以这样做:

#include <iostream>  
#include <set>  
#include <numeric>  int main() {  std::set<int> mySet = {1, 2, 3, 4, 5};  int sum = std::accumulate(mySet.begin(), mySet.end(), 0);  std::cout << "Sum of set elements: " << sum << std::endl; // 输出:15  return 0;  
}

2、fill 填充算法

fill 是 <algorithm> 头文件中的一个算法,用于向容器(或其他迭代器范围)中添加(或替换)相同的元素。

参数:

first, last:要填充的序列的开始和结束迭代器。
value:要填充的值。

返回值:

该函数没有返回值,但会修改传入的序列。

示例:

对于 std::vector:

#include <iostream>  
#include <vector>  
#include <algorithm>  int main() {  std::vector<int> vec(5); // 创建一个包含5个元素的vector,默认初始化为0  std::fill(vec.begin(), vec.end(), 7); // 用7填充整个vector  for (int num : vec) {  std::cout << num << ' '; // 输出:7 7 7 7 7  }  std::cout << std::endl;  return 0;  
}

对于 std::map:
std::map 的元素是键值对,因此你不能简单地用 std::fill 填充整个 map。但你可以遍历 map 并修改其值部分:

#include <iostream>  
#include <map>  
#include <algorithm>  int main() {  std::map<int, int> myMap = {{1, 10}, {2, 20}, {3, 30}};  for (auto& pair : myMap) {  pair.second
pair.second = 50; // 将所有值设置为50
}
// 使用 std::for_each 打印结果,因为 std::map 不保证顺序
std::for_each(myMap.begin(), myMap.end(), [](const std::pair<int, int>& p) {
std::cout << p.first << ": " << p.second << std::endl;
});
return 0;
}

对于 std::set: 由于 std::set 存储的是唯一的元素,你不能使用 std::fill 直接填充整个集合,因为这不符合集合的唯一性约束。

总结

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

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

相关文章

硬件RAID横评(上)

正文共&#xff1a;3857字 50图&#xff0c;预估阅读时间&#xff1a;12 分钟 之前误打误撞测试了软件RAID&#xff08;Windows下软RAID测试&#xff09;&#xff0c;发现性能基本上是线性的&#xff0c;而据说硬件RAID性能比这个高的很。那本文将就硬件RAID展开测试&#xff0…

ArrayList与线性表详解

1.线性表 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表有&#xff1a;顺序表、链表、队列…… 线性表在逻辑上是线性结构&#xff0c;也就是说是连续的一条直线。但是在物理结构上不一定是连续的&#xff…

算法训练营第29天|LeetCode 491.递增子序列 46.全排列 47.全排列Ⅱ

LeetCode 491.递增子序列 题目链接&#xff1a; LeetCode 491.递增子序列 解题思路&#xff1a; 用哈希集合进行去重&#xff0c;同一树层不能取重复元素。 代码&#xff1a; class Solution { public:vector<vector<int>>result;vector<int>path;void…

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…

【名词解释】ImageCaption任务中的CIDEr、n-gram、TF-IDF、BLEU、METEOR、ROUGE 分别是什么?它们是怎样计算的?

CIDEr CIDEr&#xff08;Consensus-based Image Description Evaluation&#xff09;是一种用于自动评估图像描述&#xff08;image captioning&#xff09;任务性能的指标。它主要通过计算生成的描述与一组参考描述之间的相似性来评估图像描述的质量。CIDEr的独特之处在于它考…

基于深度学习的条形码二维码检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文深入研究了基于YOLOv8/v7/v6/v5的条形码二维码检测系统。核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;进行性能指标对比&#xff1b;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码&#xff0c;及基于Streamlit的交互…

Leetcode-894-所有可能的真二叉树-c++

题目详见https://leetcode.cn/problems/all-possible-full-binary-trees/ 主搞动态规划&#xff0c;因为这玩意儿我还不是很懂 关于节点个数为奇数偶数的证明请见官方题解方法一中的如下内容&#xff1a; 这里DP的一个主要思想是&#xff1a;对于任何一个满二叉树&#xff…

4 月 8 日至 9 日 ICP Hacker House 邀你共赴 IC 生态项目开发新风口

为了更好地探索区块链技术前沿&#xff0c;体验作为全面智能合约云平台的互联网计算机&#xff08;Internet Computer Protocol&#xff09;&#xff0c;将数据、内容、计算和用户体验全部托管于链上&#xff0c;IC 生态致力于推动去中心化互联网的深度发展&#xff0c;并将更安…

jpg、bmp、png图像的位深度分别有多少种?分别表示什么意思?如果操作时需要注意什么?

JPG (JPEG) JPEG 格式通常使用 24 位颜色深度&#xff0c;这意味着每个像素由三个 8 位颜色通道组成&#xff1a;红色、绿色和蓝色&#xff08;RGB&#xff09;。因此&#xff0c;它可以表示大约 1600 万种颜色&#xff08;2^24&#xff09;。不过&#xff0c;JPEG 也支持有损…

ES6学习(四)-- Reflect / Promise / Generator 函数 / Class

文章目录 1. Reflect1.1 代替Object 的某些方法1.2 修改某些Object 方法返回结果1.3 命令式变为函数行为1.4 ! 配合Proxy 2. ! Promise2.1 回调地狱2.2 Promise 使用2.3 Promise 对象的状态2.4 解决回调地狱的方法2.5 Promise.all2.6 Promise.race 3. Generator 函数3.1 基本语…

Android Studio学习5——布局layout与视图view

wrap_content&#xff0c;内容有多大&#xff0c;就有多宽&#xff08;包裹&#xff09; 布局 padding 边框与它自身的内容 margin 控件与控件之间

This app has no Android key hashes configured. . Configure your app key

Unity 接入 Facebook SDK 的过程中遇到这个问题&#xff0c;查了很多帖子&#xff0c;不太直观&#xff0c;记录下来方便需要的同学参考 报上面错误的原因是在https://developers.facebook.com/apps/ 设置里没有填入有效的密钥 怎么填入这个密钥呢&#xff0c;其实很简单&…

Redis性能管理及集群三种模式(一)

一、前期准备 至少准备三台服务器为主从复制、哨兵的实验做准备 一台主redis、两台从redis 二、Redis性能管理 2.1 查看Redis内存使用 查看Redis内存使用——info memory 2.2 内存使用率 1<内存碎片<1.5表示合理的内存碎片大于>1.5&#xff0c;需要输入shutdown save…

VMware虚拟机三种网络模式

VMware虚拟机提供了三种主要的网络连接模式&#xff0c;它们分别是&#xff1a; 桥接模式&#xff08;Bridged Mode&#xff09;网络地址转换模式&#xff08;NAT Mode&#xff09;仅主机模式&#xff08;Host-Only Mode&#xff09; 1. 桥接模式&#xff08;Bridged Mode&am…

创建vue3项目及基本常用配置

1、创建vue3项目 1.1 创建vue3项目 确保电脑中安装了nodejs&#xff0c;新建文件夹&#xff0c;输入以下命令&#xff1a; npm create vuelatest 看是否为自己需要的vue版本&#xff0c;选择Y 各配置具体如下&#xff0c;根据自己的需求选择是或者否 npm create vuelatest …

阿里云数据库服务器价格表查询,一键查询报价

阿里云数据库服务器价格表&#xff0c;优惠99元一年起&#xff0c;ECS云服务器2核2G、3M固定带宽、40G ESSD Entry云盘&#xff0c;优惠价格99元一年&#xff1b;阿里云数据库MySQL版2核2G基础系列经济版99元1年、2核4GB 227.99元1年&#xff0c;云数据库PostgreSQL、SQL Serve…

redis哨兵搭建_主从复制高可用解决方案

redis哨兵搭建_主从复制高可用解决方案 redis集群搭建_亲自操作 Redis哨兵-实现Redis高可用 Redis Sentinel为Redis提供了高可用解决方案。实际上这意味着使用Sentinel可以部署一套Redis&#xff0c;在没有人为干预的情况下去应付各种各样的失败事件。 Redis Sentinel同时提…

Vivado sdk 20:41:22 ERROR : Error occurred while creating hardware platform错误

20:41:22 ERROR : Error occurred while creating hardware platform adrv9009_hw_platform_0 from sysdef java.io.FileNotFoundException: D:\workspace\project2024\project\adrvxxxx (拒绝访问。) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputSt…

OpenHarmony实战:标准系统移植指南

本文描述了移植一块开发板的通用步骤&#xff0c;和具体芯片相关的详细移植过程无法在此一一列举。后续社区还会陆续发布开发板移植的实例供开发者参考。 定义开发板 本文以移植名为MyProduct的开发板为例讲解移植过程&#xff0c;假定MyProduct是MyProductVendor公司的开发板…

RC滤波电路

RC滤波电路 综述&#xff1a;本文简单讲述了RC低通滤波电路和RC高通滤波电路。 滤波电路是指过滤输入信号中不需要的信号&#xff0c;保留需要的信号。 一、RC低通滤波电路 1.定义&#xff1a;RC低通滤波电路&#xff1a;保留低频信号&#xff0c;衰减高频信号。 2.截止频率…