如何从函数返回具有多个值的数组? C ++

时间:2020-09-26 00:23:52

标签: c++ function

我正在尝试从函数中返回某个数组,该函数在调用时会将值分配给该数组

该函数应如下所示:

int arr[10];
int values[10] = {1,2,3,4,5,6,7,8,9};
for (int i =0; i<10; i++)
{
arr[i] = values[i];
}

如何将此代码转换为函数?

使用命名空间标准;

3 个答案:

答案 0 :(得分:2)

据我所知,您不应该希望从函数中返回数组……就像从前一样。 相反,我要做的是将数组的名称传递给函数,并使其以所需的任何方式处理内容。就您而言,您只是在复制它们,这样就可以正常工作:

#include <iostream>
using namespace std;

void copy_array (const int [], int []); //function prototype

int main()
{
    //Your arrays
    int arr[10];
    int values[10] = {1,2,3,4,5,6,7,8,9};

    //Function call
    copy_array(values, arr);

    //Display contents of array
    for(int i =0; i<10; i++){
        cout << arr[i] << " " ;
    } 

    return 0;
}

//Function definition
void copy_array (const int values[], int arr[]){
    
    for (int i =0; i<10; i++){

        arr[i] = values[i];

    } 

}

输出

1 2 3 4 5 6 7 8 9 0 

此外,您的数组大小应该是一个常量整数变量。

答案 1 :(得分:1)

您可能不想像从没那样返回数组,因为这可能意味着很多无用的复制,这会降低程序速度,但是 您总是可以编写一个将值从一个数组复制到另一个数组的函数

#include <iostream>

void assignarray(int *dest, int *src, size_t size)
{
    for (size_t i = 0; i < size; ++i)
    {
        dest[i] = src[i];
    }
}

int main()
{

    int arr[10];
    int values[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    assignarray(arr, values, sizeof(values) / sizeof(int));
    for (size_t i = 0; i < 10; i++)
    {
        std::cout << values[i] << " ";
    }
}

输出:

1 2 3 4 5 6 7 8 9 10

答案 2 :(得分:0)

函数的返回类型不能为数组。

但是,数组可以是类的成员,而类可以是函数的返回类型,因此可以返回包装数组的类对象。标准库具有用于此类数组包装器的模板。它称为std::array

也就是说,返回数组(包装在类中)不一定是一个好的设计。有时最好让调用者创建容器-实际上,他们可以选择希望使用的容器类型-并将其传递给要填充的模板函数。这是一个接受范围的示例:

template<class Range>
void fill(Range& r) {
    assert(std::ranges::distance(r) == 10);
    int values[10] = {1,2,3,4,5,6,7,8,9};
    int i = 0;
    for (auto& e : r)
    {
         e = values[i++];
    }
}

// example
int arr[10];
fill(arr);