Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28

Удаление из list всех элементов, которые повторяются более 2 раз

18.12.2022, 17:34. Показов 1242. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прощу прощения, не могли бы помочь с удаление м повторяющихся элементов более двух раз. Моя идея заключалась в том,что через цикл я нахожу число которое повторяется >2 раз и удаляю его через erase. Нол к сожалению не получилось. В инете вообще нет информации на эту тему. Можете помочь решить эту задачу.

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
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
 
int main()
{
    list<int>lst = { 1,2,3,4,3,2,3,4,5,7,9,7,56,4,3,32,4356,5,54,3,3,8 };
    // list<int>lst={1,1,2,2,2};
    int item;
    int crot;
    // while(true)  {
   for (int value : lst) {
       int crot=false;
        if(count(lst.begin(), lst.end(), value) >2)
        {
          item=value;
          crot=true;
           break;
        }
        
   }
   if(crot=true)
   {
         auto result = remove(lst.begin(), lst.end(),item);
         lst.erase(result,lst.end());
         
   }
  /* else
   {
       break;
   }
}*/
    for (auto it = lst.begin(); it != lst.end(); it++)
        cout << *it << " ";
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.12.2022, 17:34
Ответы с готовыми решениями:

Задать массив из 20 целочисленных элементов и обнулить те числа которые повторяются более 2х раз
Задать массив из 20 целочисленных элементов и обнулить те числа которые повторяются более 2х раз. Я не понял как это делается, помогите плиз

Найти минимильное значение среди чиcел которые не повторяются, или повторяются не более 2-х раз
Вобщем надо решить данную задачу : Найти минимильное значение чилел, которые не повторяються, или повторяються не больше 2-х раз. С...

Вычислить в матрице различных элементов, те числа, которые повторяются 2 и более раз и вывести их
Нужно вычислить в матрице различных элементов, те числа, которые повторяются 2 и более раз и вывести их. Например (Число 2 - встречается 2...

29
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 18:07
Все удалить или только повторы? remove() удалит все.
0
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28
18.12.2022, 19:39  [ТС]
Добавлено через 3 минуты
nmcf, Нужно удалить все элементы которые поторяются больше двух раз,т.е. может повторяться только один или два раза
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 19:44
После count() ищи позицию второго элемента и вот на остальную часть списка делай remove().
0
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28
18.12.2022, 19:49  [ТС]
К сожалению, remove не удаляет я просто отправляет ненужные элементы в конец списка

Добавлено через 2 минуты
И как я найду позицию второго, если я использую итератор. Как раз с помощью remove я ставлю флаг между нужным и не нужным и ненужное удаляю.
Я исправил, но пришлось использовать массив.
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
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
 
int main()
{
    int array[22];
    list<int>lst = { 1,2,3,4,3,2,3,4,5,7,9,7,56,4,3,32,4356,5,54,3,3,8 };
     //list<int>lst={1,1,2,2,2};
    int i=0;
   for (int value : lst) {
      
        if(count(lst.begin(), lst.end(), value) >2)
        {
           array[i]=value;
           i++;
        }
   }
  for(int k=0; i>k;i--)
  {
  auto result = remove(lst.begin(), lst.end(),array[i]);
           lst.erase(result,lst.end());
  }
    for (auto it = lst.begin(); it != lst.end(); it++)
        cout << *it << " ";
    return 0;
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 20:00
C++
1
2
3
4
5
6
if (count(lst.begin(), lst.end(), value) > 2)
{
    list<int>::iterator it = find(lst.begin(), lst.end(), value);
    it = find(++it, lst.end(), value);
    std::remove(++it, lst.end(), value);
}
0
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28
18.12.2022, 20:07  [ТС]

Я про это говорил
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 20:22
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
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
 
int main()
{
  list < int >lst =
    { 1, 2, 3, 4, 3, 2, 3, 4, 5, 7, 9, 7, 56, 4, 3, 32, 4356, 5, 54, 3, 3, 8 };
    
  for (auto it = lst.begin (); it != lst.end (); it++)
    cout << *it << " ";
    cout << endl;
  
for (auto i = lst.begin(); i != lst.end(); ++i)
    {
    int value = *i;
    if (count (i, lst.end (), value) > 2)
    {
        list<int>::iterator it = find(lst.begin(), lst.end(), value);
        it = find(++it, lst.end(), value);
        auto ne = std::remove(++it, lst.end(), value);  
        lst.resize(std::distance(lst.begin(), ne));
    }
    }
    
  for (auto it = lst.begin (); it != lst.end (); it++)
    cout << *it << " ";
    
  return 0;
}
0
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28
18.12.2022, 20:44  [ТС]
При list < int >lst = {1,1,2,2,2}; не работает
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 21:14
У меня работает.
0
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28
18.12.2022, 21:22  [ТС]
А можешь скрин скинуть. Ты где делал Visual Studio?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 21:24
Здесь делал: https://www.onlinegdb.com/online_c++_compiler
Текст программы в 8-м сообщении.
0
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28
18.12.2022, 21:26  [ТС]
Ладно. Просто если даже и первый лист запускатть, в нём пять троек, а удаляет он только последнюю, а должы все тройки уйти
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 21:29
Вот что выводит:
Code
1
2
1 2 3 4 3 2 3 4 5 7 9 7 56 4 3 32 4356 5 54 3 3 8 
1 2 3 4 3 2 4 5 7 9 7 56 32 4356 5 54 8
0
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28
18.12.2022, 21:30  [ТС]
Ты наверное не так понял. Нужно удалить элементы которые повторяются более 2 раз, т.е три и более раз, вообще из листа,т.е полность. Их вообще не должно быть
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 21:30
Внимательно смотри. Именно это и происходит.
0
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28
18.12.2022, 21:38  [ТС]
Так как 3 повторяется пять раз, то её в листе вообще не должно быть, а она выводится

Добавлено через 44 секунды
точно также и с 4

Добавлено через 4 минуты
У меня получилось это реализовать через массив, но если у тебя получится через итераторы, то буду очень благодарен тебе.

Добавлено через 1 минуту
Я просто вижу,что ты разбираешься в этом,а я тоже хочу понять.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 21:41
Лучший ответ Сообщение было отмечено Michail111 как решение

Решение

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
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
 
int main()
{
  list < int >lst =
    { 1, 2, 3, 4, 3, 2, 3, 4, 5, 7, 9, 7, 56, 4, 3, 32, 4356, 5, 54, 3, 3, 8};
//  list < int >lst =
//    { 1, 1, 2,2,2 };
    
  for (auto it = lst.begin (); it != lst.end (); it++)
    cout << *it << " ";
    cout << endl;
  
for (auto i = lst.begin(); i != lst.end();)
    {
    int value = *i;
    if (count (i, lst.end (), value) > 2)
    {
        auto ne = std::remove(i, lst.end(), value);
        lst.resize(std::distance(lst.begin(), ne));
    }
    else ++i;
    }
    
  for (auto it = lst.begin (); it != lst.end (); it++)
    cout << *it << " ";
    
  return 0;
}
1
0 / 0 / 0
Регистрация: 23.03.2022
Сообщений: 28
18.12.2022, 21:43  [ТС]
Можешь ещё пояснить
lst.resize(std::distance(lst.begin(), ne));

Добавлено через 1 минуту
наверное это , если у меня есть два итератора и я хочу найти их общее количество элементов между двумя итераторами
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.12.2022, 21:45
Да, отсекает лишние элементы в конце.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.12.2022, 21:45
Помогаю со студенческими работами здесь

Найти и вывести на экран все элементы, которые которые повторяются более N/2 раз
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int _tmain() { ifstream f (&quot;d:\\base1.txt&quot;); ...

удалить все символы которые повторяются более раз
допустим есть строка- 12546876A54FF475E587FFFFFFFFFF154C нужно удалить все символы F которые повторяются более 2х раз. но не только их...

Каждое второе число в массиве, которые повторяются более 2 раз, удалить
На языке С написать программу. Условия: Дан массив a. Каждое второе число,которые повторяются более 2 раз, удалить. У меня тут...

Удалить в массиве все числа, которые повторяются более двух раз
После генерации чисел и нахождения одинаковых чисел, программа уходит в бесконечный цикл. Не могу понять, где я напортачил. Подскажите,...

Удалить в массиве все числа, которые повторяются более двух раз.
Вывести на экран массив. Удалить в массиве все числа, которые повторяются более двух раз.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru