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

2024-04-04 11:52

本文主要是介绍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 直接填充整个集合,因为这不符合集合的唯一性约束。

总结

这篇关于C++之STL的algorithm(5)之生成算法(accumulate、fill)整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875710

相关文章

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven