C++从函数返回数组

C++ return array from function

本文关键字:数组 返回 函数 C++      更新时间:2023-10-16

我需要在函数中读取一个数组,提取数据,然后从函数中返回一个数组。

数组将只包含2个值。

这就是我想做的概念:

int myfunction(int my_array[1])
{
    int f_array[1];
    f_array[0] = my_array[0];
    f_array[1] = my_array[1];
    // modify f_array some more
    return f_array;
}

我读过关于指针等的文章,但我感到非常困惑,希望能有一个真正基本的例子来说明如何最好地处理这个问题!

谢谢!

您不能在c++中返回n个内置数组。

如果你是c++的新手,并且对指针感到困惑,你真的不想使用数组(至少不想使用内置数组)。请改用std::vector<int>,或者如果您只有一定数量的元素并且想要表达(并且确实需要更好的性能),请使用boost::array<int, N>。(甚至是std::array<int, N>,如果你在C++11中编程(如果你不知道你是否在C++11中编程,很可能你没有)。例如:

std::vector<int> myfunction(const std::vector<int>& my_array) {
  std::vector<int> f_array;
  for(int i = 0; i < my_array.size(); ++i)
    f_array.push_back(my_array[i]);
  return f_array;
}
boost::array<int, 2> myfunction(const boost::array<int, 2>& my_array) {
  boost::array<int, 2> f_array;
  f_array[0] = my_array[0];
  f_array[1] = my_array[1];
  return f_array;
}

然后,您可以简化复制代码(查找您决定使用的任何类的构造函数和memberfunction,以及STL算法)。示例:

std::vector<int> myfunction(const std::vector<int>& my_array) {
  std::vector<int> f_array(m_array);
  ...
  return f_array;
}

另一点是,您的代码中有一个错误:您将my_array定义为int my_array[1],这意味着它是一个包含一个元素的数组,但您访问了两个元素(my_array[0]my_array[1]),对my_array[1]的访问是越界的(int foo[N]N项提供了位置,从索引0开始,一直到索引N-1)。我想你的意思是int my_array[2]

std::array<int,2> myfunction(int * my_array)
{
    std::array<int,2> f_array;
    f_array[0] = my_array[0];
    f_array[1] = my_array[1];
    // modify f_array some more
    return f_array;
}

注意,作为参数,int my_array[1]int my_array[1000]int my_array[]int * my_array完全相同。它只是一个指针,大小值毫无意义。这不适用于常规数组声明,只适用于参数。

为了确保您只收到大小为2的数组,您可以通过引用获取数组:

std::array<int,2> myfunction(int (&my_array)[2])

如果你只需要两个值,我会看看std::pair,毕竟这就是它的作用。它还具有适当的复制(在c++11中移动)语义,以使其正确工作。

不能从函数返回数组,但可以为"out"数组添加第二个参数:

void foo(int array_in[], int array_out[], int array_size)
{
    for (int i = 0; i < array_size; i++)
        array_out[i] = array_in[i];
}

如果在数组中有严格的2个元素,我建议使用std::pair

typedef std::pair<int,int> int_pair;
int_pair myfunction(int_pair ip)
{
  ip.first *= 0.12;
  ip.second -= 355; 
  return ip;
}

不能在C或C++中返回数组。

当您使用C++时,请使用容器类而不是原始数组。CCD_ 21或CCD_。

具有两个值的数组应声明为int my_array[2]。无论如何,不能按值复制数组。你说过你在这个物体上只有两个int。所以我建议您使用pair<int,int>

using namespace std;
pair<int,int> myfunction(pair<int,int> my_array)
{
  pair<int,int> f_array;
  f_array.first = my_array.first;
  f_array.second = my_array.second;
  // modify f_array some more
  return f_array;
}