我是C ++编程的新手,我想创建一个函数,将所有常见的分隔符转换为数组,然后在int main()
从函数返回一个数组:D?
谢谢!
答案 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