什么是python的C等价物';s地图()

什么是python的C等价物';s地图(),python,c,map,Python,C,Map,情况如下: 输入由空格分隔的整数/浮点/双精度类型的数据组成。数据类型将是相同的。输入的长度在运行时确定。输入显示如下(每行一个测试用例) 在python中,使用map函数返回具有所需数据类型的输入列表。我需要使用C实现同样的功能。以下是我迄今为止尝试过的: 使用fgets并解析输入,但失败和/或速度太慢的可能性太大 使用诸如strtol()、strok()等函数,但它们仅在已知输入大小时工作 有什么建议吗 PS:输入的最大数量是已知的,输入的数量总是低于这个任意大的值,但是它们的数量可以变化。

情况如下:

输入由空格分隔的整数/浮点/双精度类型的数据组成。数据类型将是相同的。输入的长度在运行时确定。输入显示如下(每行一个测试用例)

在python中,使用map函数返回具有所需数据类型的输入列表。我需要使用C实现同样的功能。以下是我迄今为止尝试过的:

  • 使用
    fgets
    并解析输入,但失败和/或速度太慢的可能性太大
  • 使用诸如
    strtol()
    strok()
    等函数,但它们仅在已知输入大小时工作
  • 有什么建议吗

    PS:输入的最大数量是已知的,输入的数量总是低于这个任意大的值,但是它们的数量可以变化。

    您的问题包含了很多与
    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;
    }