gpt4 book ai didi

c++ - 如何从函数返回数组?

转载 作者:IT老高 更新时间:2023-10-28 14:00:20 25 4
gpt4 key购买 nike

如何从方法中返回一个数组,我必须如何声明它?

int[] test(void); // ??

最佳答案

int* test();

但使用 vector 会是“更多的 C++”:

std::vector< int > test();

编辑
我会澄清一点。既然你提到了 C++,我会选择 new[]delete[]运算符,但与 malloc/free 相同。

在第一种情况下,您将编写如下内容:

int* test() {
return new int[size_needed];
}

但这不是一个好主意,因为您的函数的客户端并不真正知道您返回的数组的大小,尽管客户端可以通过调用 delete[] 安全地释放它。 .

int* theArray = test();
for (size_t i; i < ???; ++i) { // I don't know what is the array size!
// ...
}
delete[] theArray; // ok.

更好的签名是这个:

int* test(size_t& arraySize) {
array_size = 10;
return new int[array_size];
}

您的客户端代码现在是:

size_t theSize = 0;
int* theArray = test(theSize);
for (size_t i; i < theSize; ++i) { // now I can safely iterate the array
// ...
}
delete[] theArray; // still ok.

由于这是 C++,std::vector<T>是一种广泛使用的解决方案:

std::vector<int> test() {
std::vector<int> vector(10);
return vector;
}

现在您不必调用 delete[] ,因为它将由对象处理,您可以安全地迭代它:

std::vector<int> v = test();
std::vector<int>::iterator it = v.begin();
for (; it != v.end(); ++it) {
// do your things
}

这样更简单、更安全。

关于c++ - 如何从函数返回数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4264304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com