为了账号安全,请及时绑定邮箱和手机立即绑定

如何从函数返回数组?

如何从函数返回数组?

C++
弑天下 2019-08-08 15:31:13
如何从函数返回数组?如何从方法返回数组,我该如何声明它?int[] test(void); // ??
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

int* test();

但使用向量将是“更多C ++”:

std::vector< int > test();

编辑
我会澄清一些观点。既然你提到了C ++,我会new[]delete[]运营商一起使用,但与malloc / free一样。

在第一种情况下,你会写一些类似于:

int* test() {
    return new int[size_needed];}

但这并不是一个好主意,因为你的函数的客户端并不真正知道你要返回的数组的大小,尽管客户端可以通过调用来安全地释放它delete[]

int* theArray = test();for (size_t i; i < ???; ++i) { // I don't know what is the array size!
    // ...}delete[] theArray; // ok.

这个更好的签名是:

int* test(size_t& arraySize) {
    array_size = 10;
    return new int[array_size];}

您的客户端代码现在将是:

size_t theSize = 0;int* theArray = test(theSize);for (size_t i; i < theSize; ++i) { // now I can safely iterate the array
    // ...}delete[] theArray; // still ok.

由于这是C ++,`std :: vector <T>是一个广泛使用的解决方案:

std::vector<int> test() {
    std::vector<int> vector(10);
    return vector;}

现在你不必调用delete[],因为它将由对象处理,你可以安全地迭代它:

std::vector<int> v = test();std::vector<int>::iterator it = v.begin();for (; it != v.end(); ++it) {
   // do your things}

这更容易,更安全。


查看完整回答
反对 回复 2019-08-08
?
炎炎设计

TA贡献1808条经验 获得超4个赞

无法从C ++函数返回数组。8.3.5 [dcl.fct] / 6:

函数不应具有类型数组或函数的返回类型[...]

最常选择的替代方法是返回类类型的值,其中该类包含数组,例如

struct ArrayHolder{
    int array[10];};ArrayHolder test();

或者,为了返回指向静态或动态分配的数组的第一个元素的指针,文档必须向用户指示他是否需要(以及如果他应该如何)释放返回的指针所指向的数组。

例如

int* test2(){
    return new int[10];}int* test3(){
    static int array[10];
    return array;}

尽管可以返回引用或指向数组的指针,但它非常罕见,因为它是一种更复杂的语法,与上述任何方法相比没有实际优势。

int (&test4())[10]{
        static int array[10];
        return array;}int (*test5())[10]{
        static int array[10];
        return &array;}


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 409 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信