任务:创建一个将数字列表作为参数的函数,并返回一个数字列表,其中列表中的每个数字仅出现一次
据我所知,函数不能返回数组。但是,如果函数的参数是数组,则它将自动成为引用参数,因此即使它是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;
}
答案 0 :(得分:0)
这不是有效的C ++:
break
那是VLA,即C99,仅适用于gcc。
相反,请执行以下操作:
h1
返回此:
int newArray[newSize];
因为您还需要返回尺寸!即使您可以覆盖输入数组(显然,可以取决于合同,函数的文档),也需要返回新的大小。
但是您可能想学习一个真正的C ++类。