将整数作为参数并返回一个数组

时间:2010-12-18 21:27:21

标签: c++ arrays return

我想创建一个函数,它接受一个整数作为参数,并在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

5 个答案:

答案 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"));