C++ 如何从函数返回一个数组?

标签 c++ arrays dynamic-memory-allocation dynamic-arrays

我是 C++ 的新手,在尝试获取函数(采用数组)返回数组时遇到了问题。该函数是一个非常基本的排序算法,用于大小为 4 的整数数组。我所拥有的如下:

int[] sortArrayAscending(int arrayToSort[3]) {
    int sortedArray[3];
    sortedArray[0] = minOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[1] = lowerMidOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[2] = higherMidOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[3] = maxOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    return sortedArray;
}

我认为我对我需要使用的语法感到非常困惑(对 min、lower、higher、max 的函数调用都可以正常工作。

非常感谢您的帮助。

谢谢

EDIT2:感谢您的所有评论。感谢@Rook 和@Bob Yoplait 的回答,我现在已经解决了这个问题。使用的代码是:

   int* sortArrayAscending(int arrayToSort[4], int sortedArray[4]) {
    sortedArray[0] = minOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[1] = lowerMidOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[2] = higherMidOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    sortedArray[3] = maxOfFour(arrayToSort[0],arrayToSort[1],arrayToSort[2],arrayToSort[3]);
    return sortedArray;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int testNumbers[4] = {8,14,1,27};
    int testSorted[4];
    sortArrayAscending(testNumbers,testSorted);

    for (int i = 0; i < 4; i++) {
        cout << testSorted[i] << endl;
    }

    system("pause");
    return 0;
}

感谢您的所有帮助 - 现在是时候查找 vector 了!

PS 我很欣赏@Luchian Grigore 的解决方案很可能是做事的最佳实践方式,但这不是我的具体问题

最佳答案

我,我可能会使用 std::array<int, 4>如果我使用的是现代 C++ 编译器。很好地处理边界检查和内存管理以及从函数返回/传递到函数。您还可以使用现有的 STL sort它的机制和功能;无需重新发明轮子!

现在,在你的情况下,

int sortedArray[3]; 

是一个局部变量,您应该永远不要直接返回对它的引用。你可以这样做:

int* sortedArray = new int[4];
// do stuff
return sortedArray;

(还要注意数组的大小,在您的情况下是 4,而不是 3!)但在这种情况下,您必须记住在将来的某个时候删除该数组,否则您的应用程序将泄漏内存。

您也可以通过引用传入数组,使用类似的方法

void sort_array(std::array<int, 4>& the_array);

void sort_array(int** the_array)

在这些情况下,您可以就地修改数组,或者在完成排序后将答案复制到参数中。

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

相关文章:

arrays - Swift 获取所有用户到一个数组

c - 调用 realloc() 之前释放内存

c - 没有库函数将单词从句子中分离出来

c - 错误 : array type has incomplete element type; dynamic 2D array

c++ - stringstream::ignore(INT_MAX, '\n') 导致流失败

c++ - 为什么我需要同时包含 iostream 和 fstream header 才能打开文件

c++ - 使用boost线程库抛出的异常

c++ - Win32 API,系统托盘图标消失

Javascript原型(prototype)和修改原始对象

javascript - String split 返回一个元素比预期多的数组(空元素)