Вывод динамического массива без дублирующих элементов (сжатый массив) C ++ - PullRequest
0 голосов
/ 01 ноября 2018

Мне нужно сгенерировать динамический массив и удалить дубликаты элементов (уменьшить массив) (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 голосов
/ 01 ноября 2018

Вы не можете удалять элементы. Массив имеет фиксированный размер.

Однако вы можете притворяться, убирая их с пути и притворяясь, что их больше не существует.

Когда вы обнаружите «дубликат», переместите его в конец массива. (Возможно, вам придется перетасовать все последующие элементы вместе, чтобы освободить место для этого, или вы можете использовать некоторые изворотливые махинации, если вас не слишком заботит порядок).

Затем, если вы обнаружили x дубликатов в общей сложности из общего числа n значений, вам нужно будет только напечатать первые 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, чтобы окончательно стереть элементы контейнера, содержащие "скрытые" значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...