什么是python的C等价物';s地图()
情况如下: 输入由空格分隔的整数/浮点/双精度类型的数据组成。数据类型将是相同的。输入的长度在运行时确定。输入显示如下(每行一个测试用例) 在python中,使用map函数返回具有所需数据类型的输入列表。我需要使用C实现同样的功能。以下是我迄今为止尝试过的:什么是python的C等价物';s地图(),python,c,map,Python,C,Map,情况如下: 输入由空格分隔的整数/浮点/双精度类型的数据组成。数据类型将是相同的。输入的长度在运行时确定。输入显示如下(每行一个测试用例) 在python中,使用map函数返回具有所需数据类型的输入列表。我需要使用C实现同样的功能。以下是我迄今为止尝试过的: 使用fgets并解析输入,但失败和/或速度太慢的可能性太大 使用诸如strtol()、strok()等函数,但它们仅在已知输入大小时工作 有什么建议吗 PS:输入的最大数量是已知的,输入的数量总是低于这个任意大的值,但是它们的数量可以变化。
fgets
并解析输入,但失败和/或速度太慢的可能性太大strtol()
、strok()
等函数,但它们仅在已知输入大小时工作map()
无关的内容。你应该尽量避免这种情况,并且更加专注。如果有几件事你很好奇,把它们分成自己的问题,不要对整个问题喋喋不休
在C语言中,如果不先发明一种方法来描述所涉及的所有数据,就无法编写一个通用的“ApplyThisFunction”代码,那么这是可能的
如果数据是整数,则需要如下内容:
int * map_int(const int *input, size_t input_len, int (*func)(int x));
上面应该返回一个与输入大小相同的动态分配数组,其中每个元素都是在相应的输入元素上运行func()
的结果。这可能与您需要的通用map()
非常接近
这可以简单地实现,如下所示:
int * map_int(const int *input, size_t input_len, int (*func)(int x))
{
int *out = malloc(input_len * sizeof *out);
if(out != NULL)
{
for(size_t i = 0; i < input_len; ++i)
out[i] = func(input[i]);
}
return out;
}
int*映射int(常量int*输入,大小输入,int(*func)(int x))
{
int*out=malloc(输入长度*sizeof*out);
if(out!=NULL)
{
对于(大小i=0;i
请注意,上述内容将假定func
有效;更合理的通用函数应该将NULL
函数指针视为标识映射。还请注意,它执行堆分配,并将所有权移动到调用方。更合理的实现可能也应该支持调用方拥有的缓冲区
int * map_int(const int *input, size_t input_len, int (*func)(int x))
{
int *out = malloc(input_len * sizeof *out);
if(out != NULL)
{
for(size_t i = 0; i < input_len; ++i)
out[i] = func(input[i]);
}
return out;
}