C++从函数返回数组
C++ return array from function
我需要在函数中读取一个数组,提取数据,然后从函数中返回一个数组。
数组将只包含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;
}
- 为什么 C++ 中的字符数组返回其项目而不是地址?
- C++ bool 数组返回 1 或 0 以外的值
- C++ ostream 从对象数组返回数据
- 类中的重载运算符 [],因此它可以从模板类中的数组返回对象
- 指向对象的指针数组返回jibberish
- 具有基本结构的结构数组返回错误的答案
- 数组返回乐趣 movie_check()
- C++从字符数组返回类型为T的指针
- C++-将数组返回到主函数,并将数组传递给另一个函数
- C++:如何通过异常处理从越界数组返回值
- 整数数组返回类型
- 从字符串流复制到 char * 数组返回为函数参数
- C++函数从对象数组返回对象的副本.这是默认行为吗?
- 8字节数组返回长(C#到C++)
- 向c#数组返回一个字符数组c++
- 从并行数组返回值,并在以后的函数中使用这些值
- 将c++中的浮点数数组返回给Python
- 如何在gsoap中使字符串数组返回值
- 将两个字符相乘并向数组返回int
- C++套接字 - 从结构数组返回单个地址信息