C++ <array> fill 函数
fill 是 array 中用于填充所有元素的函数,可以快速将所有元素设置为同一个值。
fill 是容器类的成员函数,用于将容器中的所有元素设置为指定的值。这是一个 O(n) 操作,需要遍历所有元素。
fill 是初始化或重置 array 的快捷方式。
单词释义: fill 表示"填充",即将所有元素设置为指定值。
基本语法与参数
fill 是容器类的成员函数,需要指定填充值。
语法格式
void fill(const T& value);
参数说明
- 参数:
value- 类型: 与容器元素类型相同
- 描述: 要填充到所有元素的 值。
函数说明
- 返回值:
void(无返回值)。 - 效果: 将容器中的每个元素都设置为
value。 - 注意:
fill会修改容器中的所有元素。
实例
让我们通过一系列例子,彻底掌握 fill 的用法。
示例 1:基础用法 - 填充相同值
实例
#include <iostream>
#include <array>
int main() {
std::array<int, 5> numbers = {1, 2, 3, 4, 5};
std::cout << "填充前: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
// 用 0 填充所有元素
numbers.fill(0);
std::cout << "填充后: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
#include <array>
int main() {
std::array<int, 5> numbers = {1, 2, 3, 4, 5};
std::cout << "填充前: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
// 用 0 填充所有元素
numbers.fill(0);
std::cout << "填充后: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
运行结果预期:
填充前: 1 2 3 4 5 填充后: 0 0 0 0 0
代码解析:
numbers.fill(0)将所有 5 个元素都设置为 0。- 这是一个 O(n) 操作,遍历所有元素并赋值。
示例 2:初始化为特定值
使用 fill 可以快速初始化 array。
实例
#include <iostream>
#include <array>
#include <string>
int main() {
// 创建并初始化为 -1
std::array<int, 10> scores;
scores.fill(-1);
std::cout << "初始化为 -1: ";
for(int s : scores) {
std::cout << s << " ";
}
std::cout << std::endl;
// 创建并初始化为空字符串
std::array<std::string, 3> names;
names.fill("Unknown");
std::cout << "初始化为 Unknown: ";
for(const auto& n : names) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
#include <array>
#include <string>
int main() {
// 创建并初始化为 -1
std::array<int, 10> scores;
scores.fill(-1);
std::cout << "初始化为 -1: ";
for(int s : scores) {
std::cout << s << " ";
}
std::cout << std::endl;
// 创建并初始化为空字符串
std::array<std::string, 3> names;
names.fill("Unknown");
std::cout << "初始化为 Unknown: ";
for(const auto& n : names) {
std::cout << n << " ";
}
std::cout << std::endl;
return 0;
}
运行结果预期:
初始化为 -1: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 初始化为 Unknown: Unknown Unknown Unknown
代码解析:
fill可以用于快速初始化任何类型的 array。- 对于整数常用 0 或 -1,对于字符串常用空字符串或特定占位符。
示例 3:重置数组
fill 可以用于重置数组到初始状态。
实例
#include <iostream>
#include <array>
int main() {
std::array<int, 5> buffer;
// 初始化为 1-5
for(int i = 0; i < 5; ++i) {
buffer[i] = i + 1;
}
std::cout << "初始数据: ";
for(int n : buffer) std::cout << n << " ";
std::cout << std::endl;
// 模拟使用 buffer 后重置
buffer.fill(0);
std::cout << "重置后: ";
for(int n : buffer) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
#include <array>
int main() {
std::array<int, 5> buffer;
// 初始化为 1-5
for(int i = 0; i < 5; ++i) {
buffer[i] = i + 1;
}
std::cout << "初始数据: ";
for(int n : buffer) std::cout << n << " ";
std::cout << std::endl;
// 模拟使用 buffer 后重置
buffer.fill(0);
std::cout << "重置后: ";
for(int n : buffer) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
运行结果预期:
初始数据: 1 2 3 4 5 重置后: 0 0 0 0 0
代码解析:
fill可以快速重置 array 到已知状态。- 这在需要多次使用同一缓冲区时很有用。
示例 4:使用 fill 配合 std::generate
fill 与 STL 算法配合使用。
实例
#include <iostream>
#include <array>
#include <algorithm>
int main() {
std::array<int, 10> numbers;
// 使用 fill 填充初始值
numbers.fill(1);
std::cout << "填充 1 后: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
// 递增每个元素
for(auto& n : numbers) {
n *= 2;
}
std::cout << "翻倍后: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
#include <array>
#include <algorithm>
int main() {
std::array<int, 10> numbers;
// 使用 fill 填充初始值
numbers.fill(1);
std::cout << "填充 1 后: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
// 递增每个元素
for(auto& n : numbers) {
n *= 2;
}
std::cout << "翻倍后: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
代码解析:
fill用于设置初始值。- 之后可以配合循环或算法进行进一步处理。

C++ 容器类 <array>