关于memset()与std::fill()函数的一些东西
1.memset()
memset()定义在cstring下。
以前一直以为是设置数组中每一个int,直到昨天dijkstra写挂了才发现这个:
memset是对每个字节进行设置。
在二进制下,int的最大值表示为:
0111 1111 1111 1111 1111 1111 1111 1111
而我当时,在代码中写的是:
memset(a, 2147483647, sizeof(a));
走投无路了把a输出,发现a全都是0。。。。。。
然后研究了一下,才发现应该要这么写:e
memset(a, 127, sizeof(a));
这样设置完后,a[i]在二进制下表示为:
0111 1111 0111 1111 0111 1111 0111 1111 = 2139062143
并不是最大值。
如果要使用memset函数设置为最大值,需要单独对后面的“0111”进行设置。
2.std::fill()
std::fill()是对每一个int进行操作,更浅显。
在 C++ 中,可以使用 std::fill 函数将数组中的所有元素设置为 int 的最大值(INT_MAX)。以下是具体实现步骤:
头文件:
algorithm:用于 std::fill。
climits:用于获取 INT_MAX。(可选,要是能记住各个最大值的话)
(int最大值可以记成0x7FFFFFFF(7后面7个F),long long就再写八个F,最小值0x80000000,ll再写8个0)
iostream:用于输出结果(可选)。
使用 std::fill 将数组填充为 INT_MAX。
示例代码
#include <algorithm> // std::fill
#include <climits> // INT_MAX
#include <iostream> // std::cout
int main() {
int arr[5]; // 定义一个数组
std::fill(arr, arr + 5, INT_MAX); // 将数组所有元素设置为 INT_MAX
// 输出结果验证
for (int i = 0; i < 5; ++i) {
std::cout << arr[i] << " ";
}
return 0;
}
输出结果:
2147483647 2147483647 2147483647 2147483647 2147483647
说明
std::fill 是一个标准库函数,用于将指定范围内的元素填充为某个值。
INT_MAX 是
在代码中,arr 是数组的起始地址,arr + 5 是数组末尾的地址(注意:arr + 5 是数组末尾的下一个位置,符合 std::fill 的要求)。
通过这种方式,可以快速将数组中的所有元素设置为 int 的最大值。
时间复杂度
均为O(n)。所以和直接循环赋值是一样的()。

浙公网安备 33010602011771号