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

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为