c++返回一个数组

C++ returning an array

本文关键字:一个 数组 返回 c++      更新时间:2023-10-16

我是c++编程的新手,我想创建一个函数,为您提供所有常见的除数到数组中,然后在int main()中使用它

是否可以从函数返回一个数组:D?

谢谢!

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

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

#include <vector>
...
std::vector<int> dividers(int x, int y) {
    std::vector<int> divi;
    ...
    return divi;
}

按值返回创建一个副本,确保没有悬空指针。当通过指针返回一个局部数组时就是这种情况:当函数退出时,内存将丢失,留下指向垃圾的指针。

是的,可以以指针的形式返回数组,但不建议这样做,因为您不会提前知道它的大小。但是注意不要返回局部变量的地址(在堆栈上分配!!)。你的代码的另一个问题是,你没有初始化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;
  }

你也应该阅读迭代器来修改main函数中的循环。

我的代码中的大错误被删除…谢谢你指出来。我在向量上犯了和在数组上一样的错误。固定的现在…愚蠢的我…

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

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

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);
}

您可以这样做:

typedef int arrT[10]
arrT *func() {}

定义art为一个包含10个整型整数的数组的别名,或者

int (*func())[10]{}

在解引用时定义一个函数,返回一个包含10个整型整数的数组。

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

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

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

参考:

c++ Primer;李普曼,拉乔伊,莫

相关文章: