Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 25.02.2016
Сообщений: 1
1

Как пройти по List, отыскать дубликаты и записать их в другой List?

08.12.2018, 19:30. Просмотров 1771. Ответов 3

Добрый вечер, у меня есть List из 10 элементов, мне необходимо найти в нем все повторяющиеся элементы и записать в другой List. Если вместо List был бы массив, было бы проще, т.к. тут нельзя по индексу обращаться к элементам...Только начинаю осваивать программирование, пожалуйста, подскажите как решить эту задачу?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <list>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "RUS");
    list <int> mylist;
    for (int i=1; i<=10; i++){
        mylist.push_back(rand()% i);
    }
 
    cout<<"Список: ";
    copy (mylist.begin(), mylist.end(), ostream_iterator<int>(cout," "));
    cout<<endl;
 
    cout<<"Отсортированный список: ";
    mylist.sort();
    copy (mylist.begin(), mylist.end(), ostream_iterator<int>(cout," "));
    cout<<endl;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2018, 19:30
Ответы с готовыми решениями:

как пройти по всем элементам таблицы и записать их в List<> ?
подскажите пожалуйста List&lt;book&gt; spisok2 = new List&lt;book&gt;(); for (int i = 0; i &lt;...

Как перенести конкретный элемент из одного List в другой List
Нужно перенести не ссылку, а именно сам элемент(при учете того что списки имеют одинаковые поля)

Записать в файл по очереди элементы List<string> и List<char>
У меня есть List с string элементами и есть List с char элементами. Как сделать чтобы у файл...

у меня созданы 2 фаила - один с классом (называется list.h), а другой с реализациями функций (list.cpp).
у меня созданы 2 фаила - один с классом (называется list.h), а другой с реализациями функций...

3
6909 / 5974 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
08.12.2018, 20:20 2
Итераторы используй.
0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
09.12.2018, 03:20 3
Лучший ответ Сообщение было отмечено mriamuz как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
 
using namespace std;
 
int main()
{
    //Исходный список
    list <int> mylist;
    
    //Заполняем повторяющимися значениями
    for (int i = 1; i <= 10; i++)
        mylist.push_back(i % 3);
 
    //Выводим список
    copy(mylist.begin(), mylist.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
 
    //Сортируем список для поиска совпадающих элементов, 
    //путём сравнения каждых двух соседних функцией adjacent_find 
    mylist.sort();
 
    //Список, который будет содержать повторяющиеся элементы
    list <int> copy_list;
 
    //Находим первый повторяющийся элемент
    //adjacent_find - находит два равных соседних элемента и возвращает итератор на первый
    //из них. В случае отсутствия таких элементов - возвращает итератор на конец коллекции
    list <int>::iterator iter = adjacent_find(mylist.begin(), mylist.end());
 
    //Если такой элемент найден
    while (iter != mylist.end())
    {
        //Добавляем его в список
        copy_list.push_back(*iter);
 
        //Пропускаем все элементы, равные текущему
        //upper_bound - в упорядоченном множестве находит первый елемент,
        //который больше указанного и возвращает итератор на него. В случае отсутствия такового,
        //возвращает итератор на первый элемент, который меньше заданого или на конец коллекции
        iter = upper_bound(iter, mylist.end(), *iter);
 
        //Уже с нового элемента, который больше текущего, повторяем тот же алгоритм
        iter = adjacent_find(iter, mylist.end());
    }
 
    //Выводим полученный список
    copy(copy_list.begin(), copy_list.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
 
    system("pause");
}
1
164 / 107 / 57
Регистрация: 30.08.2018
Сообщений: 357
09.12.2018, 06:08 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    list<int> mylist;
    list<int> otherlist;
    map<int, size_t> mymap;
 
// ......................
 
    for (auto &i : mylist)
        mymap[i]++;
    
    for (auto &p: mymap)
        if (p.second > 1)
            otherlist.push_back(p.first);
 
    cout << "Список повторяющихся элементов: ";
    copy(otherlist.begin(), otherlist.end(), ostream_iterator<int>(cout, " "));
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2018, 06:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перенести значения из одного List<T> в другой List
Добрый вечер, возможно глупы вопрос, но он привел меня в замешательство. Как копировать значения...

Записать в файл list (очередь) объектов, в которых содержатся строки string, и считать с файла обратно в list
Извините подскажите пожалуйста, как записать list(очередь) объектов в которых содержаться string, и...

Как удалить дубликаты списка файлов из List<string>?
1 - Собираю список файлов в List&lt;string&gt; После показываю его на консоль: private static readonly...

Копирование объектов List в другой List
Есть ли способ менее топорового копирования объектов одного List'а в другой List? List&lt;Card&gt;...

Конвертировать один элемент из List<List<Class>> в list и string
Как можно перевести один выбранный элемент из List&lt;List&lt;Data&gt;&gt; myList в list и string? Например,...

Удалить дубликаты в List
Всех приветствую, Софт открывает текстовый файл и заносит его содержимое в List Текстовый файл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.