c++返回一个数组
C++ returning an array
我是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;李普曼,拉乔伊,莫