导读:本期聚焦于小伙伴创作的《C++中fill函数怎么填充数组 C++快速给内存块赋初始值方法有哪些》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C++中fill函数怎么填充数组 C++快速给内存块赋初始值方法有哪些》有用,将其分享出去将是对创作者最好的鼓励。

在C++开发中,给数组或者指定内存块设置初始值是非常常见的操作,fill函数作为标准库提供的通用赋值工具,能够适配多种容器和数组类型,同时还有其他方法可以快速完成内存块的赋值,不同方法有不同的适用场景。

C++中fill函数怎么填充数组 C++快速给内存块赋初始值方法有哪些

fill函数的基本用法

fill函数定义在<algorithm>头文件中,作用是将指定范围内的所有元素设置为给定的值,它的函数原型为:

template <class ForwardIterator, class T> void fill (ForwardIterator first, ForwardIterator last, const T& val);

其中first是起始迭代器,last是结束迭代器(左闭右开区间),val是要赋的值。fill函数可以填充普通数组,也可以填充vector等标准容器。

用fill填充普通数组

普通数组可以通过指针作为迭代器传入fill函数,示例如下:

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int arr[10];
    // 填充arr数组的所有元素为5
    fill(arr, arr + 10, 5);
    for (int i = 0; i < 10; i++) {
        cout << arr[i] << " ";
    }
    // 输出结果:5 5 5 5 5 5 5 5 5 5
    return 0;
}

用fill填充vector容器

对于vector容器,可以直接使用其begin和end迭代器,示例如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> vec(8);
    // 填充vec的所有元素为3
    fill(vec.begin(), vec.end(), 3);
    for (int num : vec) {
        cout << num << " ";
    }
    // 输出结果:3 3 3 3 3 3 3 3
    return 0;
}

快速给内存块赋初始值的其他方法

除了fill函数之外,还有几种常用的方法可以快速给内存块赋值,不同方法的适用场景有所区别。

memset函数

memset定义在<cstring>头文件中,按字节对内存块进行赋值,适合用来给char类型数组赋值,或者给整型数组赋0、-1等特定值,但是不能用来赋其他整数值,因为会按字节填充导致结果不符合预期。

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    int arr[10];
    // 给arr数组所有字节赋0,等价于所有元素为0
    memset(arr, 0, sizeof(arr));
    char str[20];
    // 给字符数组赋值为'a'
    memset(str, 'a', sizeof(str));
    return 0;
}

初始化列表赋值

在定义数组或者vector的时候,可以直接使用初始化列表赋予初始值,适合初始值已知且数量不多的情况。

#include <iostream>
#include <vector>
using namespace std;

int main() {
    // 普通数组初始化
    int arr[5] = {1, 2, 3, 4, 5};
    // vector初始化
    vector<int> vec = {1, 2, 3, 4, 5};
    return 0;
}

fill_n函数

fill_n函数也是<algorithm>头文件中的工具,作用是给从指定位置开始的n个元素赋值,适合需要填充指定数量元素的场景。

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
    vector<int> vec(10);
    // 从vec起始位置开始,填充5个元素为7
    fill_n(vec.begin(), 5, 7);
    for (int num : vec) {
        cout << num << " ";
    }
    // 输出结果:7 7 7 7 7 0 0 0 0 0
    return 0;
}

不同方法的适用场景对比

为了更清晰地选择赋值方法,以下是常用方法的对比:

方法适用场景注意事项
fill函数任意类型的数组、容器,赋任意合法值需要包含<algorithm>头文件,区间是左闭右开
memset函数char数组赋值,整型数组赋0、-1按字节赋值,不能给整型赋非0、-1的值
初始化列表定义时赋少量已知初始值只能在定义的时候使用,后续无法再用这种方式赋值
fill_n函数从指定位置开始填充指定数量的元素需要确保填充的数量不超过容器或数组的大小,避免越界

常见注意事项

  • 使用fill函数填充数组时,要确保传入的区间是有效的,避免访问越界内存。
  • memset填充非char类型的数组时,只有赋0和-1是安全的,其他值会导致每个字节都被设置为该值,最终整数结果不符合预期。
  • 如果填充的是自定义类型,需要保证赋值的值和自定义类型的赋值运算符兼容,否则可能出现编译错误或者运行时问题。

C++fill函数数组填充内存块赋值memset修改时间:2026-07-16 15:12:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。