我是 C++ 编程的新手,我想创建一个函数,将所有公共分隔符放入一个数组中,然后在int main()
是否可以从函数返回数组:D?
谢谢!
代码: http: //pastebin.com/K8195wzF
我是 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;
}
您也应该阅读迭代器以修改主函数中的循环。
删除了我的代码中的大错误...感谢您指出。我对向量犯了与数组相同的错误。现在修复...愚蠢的我...
不,这是不可能的。您可以返回一个向量,也可以将指向数组第一个元素的指针传递给您的函数。
查看您的代码,指针选项看起来像这样
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() {}
其中将 arrT 定义为 10 个整数数组的别名,或者
int (*func())[10]{}
其中一个在取消引用时定义 func 以返回 10 个整数的数组。
这样的using
声明using arrT = int[10]
也是可能的。
正如其他人所指出的,使用声明为的函数可以从包含所需类型的函数返回 std::vector std::vector<int> func(){}
。
此外,您可以使用另一个容器std::array<>
并完全忘记内置数组。