你能帮我解决删除数组 c++ 中重复值的挑战吗?

Can you help me with a deleting duplicated values in an array c++ challenge?

本文关键字:挑战 c++ 解决 数组 删除      更新时间:2023-10-16

挑战在于编写一个删除数组重复值的程序。

#include <iostream>
using namespace std;
void func(int arrayA[], int n, int arrayB[]) {
int h = 0;
int count = 0;
arrayB[0] = arrayA[0];
for (int i = 1; i < n; i++) {
count = 0;
for (int j = 0; j < n; j++) {
if (arrayB[i] == arrayA[j]) {
count++;
}
}
if (count == 0) {
h++;
arrayB[h] = arrayA[i];
}
}
}
int main() {
int n;
cin >> n;
int arrayA[n];
int arrayB[n];
for (int i = 0; i < n; i++) {
cin >> arrayA[i];
}
func(arrayA, n, arrayB);
for (int i = 0; i < n; i++) {
cout << arrayB[i] << endl;
}
}

我的逻辑是创建一个新数组并用非重复值填充它,为此我创建了一个循环,当它找到重复值时,该循环将 1 添加到计数器,如果计数器等于 0,则添加该值。 然后计数器重新启动。

感谢您对新程序员的帮助,我真的尝试自己解决它。

使用std::vector

如果你想偷懒,试着看看这个例子。您可以执行以下操作(未测试(:

std::vector<int> func(int a[], int size_a){
std::vector<int> vec_a(a, a + size_a); 
std::sort(vec_a.begin(), vec_a.end()); 
std::vector<int> ordered_vec_a = std::unique(vec_a.begin(), vec_a.end()); 
vec_a.erase(ordered_vec_a, vec_a.end()); 
return ordered_vec_a;
}

"硬核"C++

如果你想解决你的问题,并继续你的解决方案,使用一种更"原始"的方法,你将需要确保返回的数组恰好是数组a中唯一元素的数量。

所以,首先,获取a的独特元素的数量,看看这个答案。之后,您可以创建输出数组,b

int b = new int[size_calc_from_post]
//do stuff here.
delete[] b; // make sure to delete! 
b = NULL;