c++ - C中的fill_n是否有等效函数?
问题描述
如果我想将fill_n
函数从 CPP 翻译成 C,那会是什么样子?
如果我在fill_n
下面有两个函数,并且我想0
在 C 中填充它,我该怎么做?
fill_n(vaToPa, number_of_virtual_memory, 0);
fill_n(paToVa, number_of_physical_memory, 0);
解决方案
对于字节,您可以使用memset
. 因为wchar_t
你可以使用wmemset
. 除此之外,标准库没有用于填充的通用函数。你可以做一个,但它看起来不像模板那么干净,所以在大多数情况下你可能想使用一个普通的 for 循环。它可能看起来像这样:
#include <stdio.h>
#include <string.h>
void my_fill_n(void *base, const void *fill, size_t nmemb, size_t size)
{
for (char *i = base; i < (char *)base + nmemb * size; i += size)
memcpy(i, fill, size);
}
int main(void)
{
int a[10];
my_fill_n(a, &(int){42}, sizeof a / sizeof *a, sizeof *a);
for (unsigned i = 0; i < sizeof a / sizeof *a; ++i)
printf("%d\n", a[i]);
}
输出:
42
42
42
42
42
42
42
42
42
42
请注意,与它my_fill_n
相比std::fill_n
,它也受到限制,因为它仅适用于数组,而不适用于任何其他数据结构。
推荐阅读
- mysql - HANDLER FOR NOT FOUND 是如何工作的,它的用途是什么?
- c++ - 访问父级及其父级
- c++ - getch() 的 Visual Studio 设置
- xcode - 尝试将资源中的 .xcassets 添加到 podspec 文件时出错
- mysql - mysql。不断收到外键约束格式错误
- python - 如何在openCV上使用blaster senz3d捕获3d深度图像
- php - PHP-SQL 如何从表中获取数据并将记录分离到表中
- python - 多次迭代 3 个元素的列表
- python-3.x - Read_HTML 跳过一些行不工作
- c - 名称数组和C中数组的第一个元素有什么区别?