我想创建一个函数,它接受一个整数作为参数,并在C ++中返回一个数组。这是我想到的伪代码:
function returnarray(integer i)
{
integer intarr[i];
for (integer j = 0; j < i; j++) { intarr[j] = j; }
return intarr;
}
我尝试了将returnarray声明为函数*返回指针的常用方法,但是我不能将整数作为参数。我也不能将j分配给intarr [j]。我真的很想避免使用指向int的指针,所以我可以使用参数。
有没有办法做到这一点,并且能够将j分配给intarr [j]而不为其指针?
编辑:
忘了写我想避免矢量。我只有在必须的时候使用它们! (我的理由是我的。)
谢谢:D
答案 0 :(得分:10)
您无法返回堆栈分配的数组 - 它将超出范围并释放内存。此外,C ++不允许堆栈分配的可变长度数组。你应该使用std :: vector。
std::vector<int> returnarray(int i) {
std::vector<int> ret(i);
for(int j = 0; j < i; j++) ret[j] = j;
return ret;
}
答案 1 :(得分:5)
你的代码甚至没有接近有效的c ++,所以我假设你是初学者
使用std::vector
#include <vector>
std::vector<int> yourFunction( int n )
{
std::vector<int> result;
for( int i = 0; i < n; ++i )
{
result.push_back( i );
}
return result;
}
免责声明:编码人员手中没有触及代码。
干杯&amp;第h。,
答案 2 :(得分:1)
两个评论,在使用优秀的@DeadMG解决方案之前:
1)你永远不想避免矢量。如果v
是一个向量,并且你真的想要一个指针,那么你总是可以通过编写&v[0]
来指向第一个元素。
2)您无法返回数组。您将返回一个指向新内存区域的指针,一旦完成,您将不得不删除它。向量只是具有自动删除功能的数组,因此不会泄漏内存。
答案 3 :(得分:0)
您需要使用动态内存。像这样的东西
int* returnArray(int size) {
int* array = new int[size];
for(int i = 0; i < size; ++i)
array[i] = i;
return array;
}
答案 4 :(得分:0)
并非我特别推荐这种方法,但您可以使用模板来执行此操作,而无需使用动态内存分配。遗憾的是,您无法从函数返回数组,因此您需要返回一个包含数组的结构。
template <int N>
struct int_array_type {
int ints[N];
};
template <int N>
int_array_type<N> returnarray() {
int_array_type<N> a;
for (int i = 0; i < N; ++i)
a.ints[i] = i;
return a;
}
...
int_array_type<10> u = returnarray<10>();
std::copy(u.ints, u.ints+sizeof(u.ints)/sizeof(u.ints[0]),
std::ostream_iterator<int>(std::cout, "\n"));