输出没有重复元素的动态数组(收缩数组)C++

Output dynamic array without duplicate elements (shrink the array) C++

本文关键字:数组 C++ 动态 元素 输出      更新时间:2023-10-16

我需要生成动态数组,并使用循环和基本代码删除重复元素(收缩数组((1,2,2,3==1,2,3(。我创建了一个数组,但不知道如何删除元素。也许,通过将唯一元素复制到新数组中。

void RandArrayA(int * A, const int m)
{
srand(time(0));
for (int a = 0; a < m; a++)
{
A[a] = rand() % 10 * (1 - 2 * (rand() % 2));
cout << A[a] << " ";
}
cout << endl;
}
void Find(int * A, const int m)
{
}

您不能删除元素。数组具有固定大小。

然而,你可以假装,让他们让开,假装他们已经不存在了。

当检测到"重复"时,将其移动到阵列的末尾。(你可能需要打乱所有后续元素,为其腾出空间,或者如果你不太在乎顺序,你可以使用一些花哨的交换把戏(。

然后,如果在总共n个值中总共检测到x重复,则只需要打印数组的第一个

n-x它们仍然存在,在数组的末尾,但您不需要对它们做任何操作。

让我们看看您的数据集:

Original:    1,3,5,4,5   (5 elements)
Reorganised: 1,3,5,4,5   (1 duplicate; therefore, 4 useful elements)

不幸的是,这不是一个很好的演示示例,因为唯一重复的值是已经在数据集末尾了!

选择一个随机的替代数据集:

Original:    1,1,3,4,5,6,5,8   (8 elements)
Reorganised: 1,3,4,5,6,8,1,5   (2 duplicates; therefore, 6 useful elements)

顺便说一句,std::remove和朋友们就是这样工作的,这也是为什么你需要执行std::erase来最终消除包含"隐藏"值的容器元素