【问题标题】:integers array return type [duplicate]整数数组返回类型[重复]
【发布时间】:2015-01-11 04:07:07
【问题描述】:

我想知道我是否可以让函数返回一个整数数组。我尝试了如下代码:

int function[](){
    code;
}

我尝试过如下代码:

int[] function(){
    code;
}

都不行。有什么建议么?

【问题讨论】:

  • 返回一个数组通常是不切实际的。
  • 答案会有所不同
  • 没有一个答案告诉你:数组不可复制或分配,所以你不能按值返回一个。您需要返回其他内容,或者找到另一种方法将感兴趣的数据复制到预先存在的数组中。任何可能的解决方案都将取决于语言。不幸的是,您标记了两个。
  • C 和 C++ 在这个问题上可能有点不同

标签: c++ c return-type


【解决方案1】:

如果数组的大小已知,您可以尝试std::array<int, N>。在其他情况下,请改用std::vector<int>

【讨论】:

    【解决方案2】:

    解决方案:

    #include <iostream>
    #include <vector>
    
    void print_vec(int arr[])
    {
        std::vector<int> vec;
        vec.insert(vec.begin(), arr, arr+3);
        for (auto x: vec) {
             std::cout << ' ' << x;
        }
        std::cout << '\n';
    }
    
    int main ()
    {
        int arr[] = { 501,502,503 };
        print_vec(arr);
    }
    
    Output:
    
    501 502 503
    

    链接到编译器 -> Compiler Link

    【讨论】:

    • 为什么投反对票?我做了 OP 要求的一切。
    【解决方案3】:

    试试这个:-

    int* function ()
    {}
    

    但不要忘记调用函数现在负责该数组,即删除该数组。

    【讨论】:

      【解决方案4】:

      如果数组是使用堆上的new 运算符创建的,则可以返回指向数组的指针。像这样:

      int* get_an_array(int array_size)
      {
         int arr = new int[array_size];
      
         return arr;
      }
      

      请记住,稍后您将负责删除该数组。

      注 1:
      您不能返回指向本地创建的数组(放置在堆栈上)的指针。例如:

      int* get_an_array(int array_size)
      {
         int arr[array_size];
      
         return arr;
      }
      

      一旦您退出函数,该数组就会被销毁。

      注2:
      考虑使用 STL 向量而不是数组。使用 STL 向量:1) 在调用函数之前,您不需要知道元素的数量。 2)您不需要动态创建数组。 (由于编译器利用了复制省略(RVO),因此按值返回向量通常也很快)。

      【讨论】:

        【解决方案5】:
        #include <stdio.h>
        
        int *func1(int year){
            static int array[][13] = {
                {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
            };
            return array[year % 4 == 0 && year % 100 != 0 || year % 400 == 0];
        }
        int (*func2(int year))[13]{
            static int array[][13] = {
                {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
            };
            return &array[year % 4 == 0 && year % 100 != 0 || year % 400 == 0];
        }
        
        int main(void){
            int *p1 = func1(2000);
            int (*p2)[13] = func2(2000);
        
            printf("%d\n", p1[2]);
            printf("%d\n", (*p2)[2]);
        
            return 0;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-28
          • 1970-01-01
          • 2015-06-06
          • 2011-05-17
          • 2019-05-04
          • 1970-01-01
          • 2011-08-17
          • 2015-12-22
          相关资源
          最近更新 更多