当前位置: 首页 > backend >正文

c++的STL库里的fill

C++ STL 中 fill 函数的用法与扩展

fill(a, a+n, 0) 是 C++ 标准库 <algorithm> 中 fill 函数的一个典型用法。这个表达式的含义是:

  • 将数组 a 中从起始位置到第 n 个元素(共 n 个元素)的值全部设置为 0
基本语法和用法

fill 函数的基本语法如下:

cpp

运行

fill(first, last, value);

其中:

  • first:指向要填充的第一个元素的迭代器
  • last:指向要填充的最后一个元素之后位置的迭代器
  • value:要赋给范围内每个元素的值

这个函数可以用于任何支持迭代器的容器,包括数组、vector、list 等。

示例代码

下面是一些使用 fill 函数的示例:

cpp

运行

#include <iostream>
#include <algorithm>
#include <vector>
#include <array>int main() {// 填充普通数组int arr[10];fill(arr, arr + 10, 5);  // 将数组arr的所有元素设置为5// 填充vectorstd::vector<int> vec(10);fill(vec.begin(), vec.end(), 10);  // 将vector的所有元素设置为10// 填充数组的部分区域fill(arr + 3, arr + 7, 0);  // 将arr[3]到arr[6]设置为0// 打印数组for (int i = 0; i < 10; i++) {std::cout << arr[i] << " ";}std::cout << std::endl;// 打印vectorfor (int val : vec) {std::cout << val << " ";}std::cout << std::endl;return 0;
}
扩展用法

除了基本的 fill 函数外,STL 还提供了一些相关的函数:

  1. fill_n:填充指定数量的元素

    cpp

    运行

    fill_n(arr, 5, 100);  // 将arr的前5个元素设置为100
    
  2. iota:生成连续递增的值(C++11 引入)

    cpp

    运行

    #include <numeric>
    iota(arr, arr + 10, 1);  // 生成序列:1, 2, 3, ..., 10
    
  3. 使用 lambda 表达式进行自定义填充

    cpp

    运行

    #include <iostream>
    #include <algorithm>
    #include <vector>int main() {std::vector<int> vec(5);int value = 1;// 使用lambda表达式填充递增的值std::generate(vec.begin(), vec.end(), [&value]() { return value++; });for (int val : vec) {std::cout << val << " ";}std::cout << std::endl;return 0;
    }
    

注意事项
  • fill 函数的时间复杂度是 O (n),其中 n 是填充范围的大小
  • 对于基本数据类型(如 int、double 等),使用 fill 比循环赋值更简洁
  • 对于自定义类型,确保该类型支持赋值操作
  • 在使用 fill_n 时要确保目标容器有足够的空间,否则会导致未定义行为

fill 函数是 STL 中一个简单但非常实用的工具,特别是在需要批量初始化数据时。

http://www.xdnf.cn/news/14026.html

相关文章:

  • 自主 Shell 命令行解释器
  • Dify创建 echarts图表 (二)dify+python后端flask实现
  • [MSPM0开发]之七 MSPM0G3507 UART串口收发、printf重定向,解析自定义协议等
  • 如何解决答题小程序大小超过2M的问题
  • C#使用ExcelDataReader高效读取excel文件写入数据库
  • 华为云Flexus+DeepSeek征文|基于华为云一键部署 Dify 应用的性能测试实践:构建聊天应用并使用 JMeter做压力测试
  • HarmonyOS5 运动健康app(一):健康饮食(附代码)
  • 苹果获智能钱包专利,Find My生态版图或再扩张:钱包会“说话”还能防丢
  • 【论文阅读笔记】ICLR 2025 | 解析Ref-Gaussian如何实现高质量可交互反射渲染
  • pom文件引用外部jar依赖
  • Web开发实战:Gin + GORM 构建企业级 API 项目
  • 使用 C/C++ 和 OpenCV 判断是否抬头
  • Spring 事务传播行为详解
  • 自己的服务器被 DDOS跟CC攻击了怎么处理,如何抵御攻击?
  • 公司内网远程访问配置教程:本地服务器(和指定端口应用)实现外网连接使用
  • 29-Oracle 23ai Flashback Log Placement(闪回日志灵活配置)
  • 进程控制
  • Trae Builder 模式:从需求到全栈项目的端到端实践
  • 书写时垂直笔画比水平笔画表现更好的心理机制分析
  • Android binder内核漏洞研究(一)——环境搭建
  • 【MySQL基础】表的约束的类型与使用指南
  • 从Apache OFBiz 17.12.01的反序列化漏洞到Docker逃逸的渗透之红队思路
  • GaussDB 分布式数据库调优(架构到全链路优化)
  • C#实战:解决NPOI读取Excel单元格数值0.00001显示为1E-05的问题
  • [特殊字符] Harmony OS Next里的Web组件:网页加载的全流程掌控手册
  • macOS 查看当前命令行的ruby的安装目录
  • 大语言模型的分类与top3
  • Spark 之 Subquery
  • matlab实现非线性Granger因果检验
  • 深度学习:PyTorch张量基本运算、形状改变、索引操作、升维降维、维度转置、张量拼接