我需要使用循环和基本代码生成 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)
{
}
答案 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
来最终消除包含“隐藏”值。