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

时间:2018-11-01 19:05:20

标签: c++ arrays dynamic

我需要使用循环和基本代码生成 dynamic 数组并删除重复的元素(缩小数组)(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)
{

}

1 个答案:

答案 0 :(得分:1)

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

但是,您可以通过将它们放开并假装它们不再存在来伪造它。

当您检测到“重复项”时,将其移至数组末尾。 (您可能需要重新整理所有后续元素以为其腾出空间,或者,如果您不太在意订单,则可以使用一些奇特的交换恶作剧方法。)

然后,如果在总共 n 个值中总共检测到 x 个重复项,则只需要打印第一个 nx 个>数组的值。这会“隐藏”重复项。

它们仍然在数组的末尾,但是您不需要对它们做任何事情。

让我们看看您的数据集:

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来最终消除包含“隐藏”值。