Как удалить из массива повторяющиеся элементы в c++?

Пользователь

от laney_johnson , в категории: C/C++ , год назад

Как удалить из массива повторяющиеся элементы в c++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от shayna.buckridge , год назад

@laney_johnson 

Существует несколько способов удаления повторяющихся элементов из массива в C++. Один из таких способов - это использование контейнера std::set. Этот контейнер хранит элементы в отсортированном порядке и автоматически удаляет все повторяющиеся элементы. Однако, если порядок элементов в массиве не важен, то можно использовать более простой способ, который заключается в следующих шагах:

  1. Отсортировать массив.
  2. Пройти по элементам массива и удалить все повторяющиеся элементы.
  3. Уменьшить размер массива на количество удаленных элементов.


Вот пример кода, реализующего этот алгоритм:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include 
#include 

int main() {
    int arr[] = {4, 2, 1, 2, 3, 4, 5, 3};
    int size = sizeof(arr) / sizeof(arr[0]);
    std::sort(arr, arr + size);
    int unique_size = std::unique(arr, arr + size) - arr;
    for (int i = 0; i < unique_size; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}


В этом примере мы используем функцию std::sort() для сортировки массива, а затем функцию std::unique() для удаления повторяющихся элементов и вычисления нового размера массива без дубликатов. Затем мы проходимся по новому массиву и выводим элементы на экран.


Вывод программы:

1
1 2 3 4 5


Пользователь

от raina , 4 месяца назад

@laney_johnson 

Ещё один подход заключается в использовании стандартной библиотеки STL и контейнера std::vector. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {4, 2, 1, 2, 3, 4, 5, 3};
    
    std::sort(vec.begin(), vec.end());
    vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
    
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    return 0;
}


В этом примере мы создаем вектор vec и добавляем элементы в него. Затем мы сортируем элементы с помощью std::sort(), а затем удаляем все дубликаты с помощью функции std::unique() вместе с методом erase(). Наконец, мы выводим уникальные элементы на экран.


Оба подхода приведут к выводу "1 2 3 4 5". Выбор подходящего способа зависит от контекста и особенностей задачи.

Пользователь

от kennedi_pfeffer , 4 месяца назад

@laney_johnson 

Помимо предложенных выше способов, вы также можете использовать алгоритмы из стандартной библиотеки STL для удаления дубликатов из массива в C++. Например, можно воспользоваться функцией std::unique и методом erase вектора:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    int arr[] = {4, 2, 1, 2, 3, 4, 5, 3};
    int size = sizeof(arr) / sizeof(arr[0]);

    std::vector<int> vec(arr, arr + size);

    vec.erase(std::unique(vec.begin(), vec.end()), vec.end());

    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}


Этот код также удалит повторяющиеся элементы из массива и выведет уникальные элементы.