函数是否可以用较小的数组来重写输入数组?

时间:2019-04-06 11:00:04

标签: c++

任务:创建一个将数字列表作为参数的函数,并返回一个数字列表,其中列表中的每个数字仅出现一次

据我所知,函数不能返回数组。但是,如果函数的参数是数组,则它将自动成为引用参数,因此即使它是void函数,它也会“覆盖”输入数组。有什么方法可以覆盖一个较小的输入数组(作为参考参数)?

具体来说:在下面的代码中,我想用newArray [6]覆盖number [10]数组

本周我才开始学习代码,这对我来说是一项练习任务,因此我想使用C ++基础知识来解决这一问题,而无需使用指针和更复杂的内容。如果不可能,也可以。

#include <iostream>
#include <string>

void selectionSort(int[], int);

void unique(int[], int);

void print(int[], int);

int main(int argc, char *args[]) {

    int numbers[] = {1, 11, 34, 11, 52, 61, 0, 1, 34, 1, 61, 72};
    int size = sizeof(numbers) / sizeof(int);

    unique(numbers, size);

    return 0;
}

void unique(int arr[], int size) {

    selectionSort(arr, size);
    int newSize = 1;

    for (int i = 0; i < size - 1; ++i) {
        if (arr[i] < arr[i + 1]) {
            newSize++;
        }
    }

    int newArray[newSize];

    int index = 0;
    for (int i = 0; i < size - 1; ++i) {
        if (arr[i] < arr[i + 1]) {
            newArray[index] = arr[i];
            ++index;
        }
    }

    newArray[newSize - 1] = arr[size - 1];
    print(newArray, newSize);
}

void selectionSort(int arr[], int size) {

    for (int i = 0; i < size; i++) {
        int min = i;
        for (int j = i; j < size; j++) {
            if (arr[j] < arr[min]) {
                min = j;
            }
        }
        std::swap(arr[i], arr[min]);
    }
}

void print(int arr[], int size) {
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

1 个答案:

答案 0 :(得分:0)

这不是有效的C ++:

break

那是VLA,即C99,仅适用于gcc。

相反,请执行以下操作:

h1

返回此:

int newArray[newSize];

因为您还需要返回尺寸!即使您可以覆盖输入数组(显然,可以取决于合同,函数的文档),也需要返回新的大小。

但是您可能想学习一个真正的C ++类。