C ++返回一个数组

时间:2013-03-27 15:02:45

标签: c++ arrays return

我是C ++编程的新手,我想创建一个函数,将所有常见的分隔符转换为数组,然后在int main()

中使用它

从函数返回一个数组:D?

谢谢!

代码:http://pastebin.com/K8195wzF

4 个答案:

答案 0 :(得分:4)

返回像std::vector这样的动态大小的容器,这里有一个最好的用例:

#include <vector>
...

std::vector<int> dividers(int x, int y) {
    std::vector<int> divi;

    ...
    return divi;
}

按值返回会创建一个副本,确保没有dangling pointers。通过指针返回本地数组就是这种情况:当函数退出而指针指向垃圾时,内存将丢失。

答案 1 :(得分:1)

是的,可以以指针的形式返回一个数组,但不推荐这样做,因为你事先不知道它的大小。 但注意不要返回局部变量的地址(在堆栈上分配!!)。您的代码的另一个问题是您没有初始化d。首选的C ++方法是返回该类型的向量(不再需要d

   #include <vector>
   ....
   vector<int> dividers(int y,int x){
    int yx;
    vector<int> divi;
    divi.reserve(100);
    if(y > x){
      yx = y;
    }
    if(x > y){
      yx = x;
    }

    for (int n = 1; n <= yx; n++){
      if ((n%y==0) && (n%x==0)){
        divi.push_back(n);
      }
    }

    return divi;
  }

您也应该阅读迭代器以修改主函数中的循环。

我的代码中的大错误已删除...感谢您指出。我用向量做了同样的错误,你对数组有什么了。现在修好了...愚蠢的我......

答案 2 :(得分:-1)

不,这是不可能的。你可以返回一个向量,或者你可以将一个指向数组的第一个元素的指针传递给你的函数。

查看代码,指针选项看起来像这样

int dividers(int y,int x, int* divi){
    ...
}

int main()
{
    int divi[100];
    ...
    dividers(x, y, divi);
}

矢量解决方案可能看起来像这样

std::vector<int> dividers(int y,int x){
    std::vector<int> divi;
    ...
        divi.push_back(n); // when you want to add a divider to your vector
    ...
    return divi;
}

int main()
{
    std::vector<int> divi;
    ...
    divi = dividers(x, y);
}

答案 3 :(得分:-1)

您可以执行以下操作:

typedef int arrT[10]

arrT *func() {}

其中一个人将arrT定义为10个整数或

的数组的别名
int (*func())[10]{}

当取消引用以返回10个整数的数组时,可以定义func。

using声明,using arrT = int[10]也是可能的。

正如其他人所说,使用声明为std::vector<int> func(){}的函数可以从包含所需类型的函数返回std :: vector。

此外,您可以使用另一个容器std::array<>并完全忘记内置数组。

参考:

C++ Primer; Lippman, Lajoie, Moo