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

Удалить из списка элементы с повторяющимися более одного раза значениями

21.11.2015, 17:27. Показов 4850. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста!
Есть задание: Удалить из списка элементы с повторяющимися более одного раза
значениями.
Есть программа, работает правильно, но нужно функцию find реализовать самой, а не использовать библиотечную.
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
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include <iostream>
#include <ctime>
#include <list>
#include <algorithm>
using namespace std;
 
int  main(void) {
    srand(time(0));
    list<int> lst;
    int N = 20;
    for (int i = 0; i<N; ++i)
    {
        lst.push_back(rand() % 20);
    }
    cout << endl;
    for (auto i : lst)
    {
        cout << i << " ";
    }
    cout << endl;
    
 
    int ch;
    list<int>::iterator ptr;
    for (list<int>::iterator iter = lst.begin(); iter != lst.end(); *iter++) {
        if (count(lst.begin(), lst.end(), *iter) > 1) {
            ch = *iter;
            while ((ptr = find(lst.begin(), lst.end(), ch)) != lst.end())
                lst.erase(ptr);
            if (lst.size() > 0u)
                iter = lst.begin();
            else
                break;
        }
    }
 
    for (; !lst.empty(); lst.pop_front())
        cout << lst.front()<<endl;
    cout.put('\n');
    cin.get();
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2015, 17:27
Ответы с готовыми решениями:

Удалить из списка элементы с повторяющимися более одного раза значениями (найти ошибку)
Удалить из списка элементы с повторяющимися более одного раза значениями #define _CRT_SECURE_NO_WARNINGS #include...

Удалить из массива элементы входящие более одного раза
Задача удалить из массива Х элементы входящие в него более одного раза. Я как понимаю сколько раз входил элемент j.Если совпали то плюс...

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

9
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.11.2015, 19: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
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <ctime>
#include <list>
#include <set>
using namespace std;
 
int  main(void) {
    srand((int)time(0));
    list<int> lst;
    int N = 20;
    for (int i = 0; i<N; ++i)
    {
        lst.push_back(rand() % 20);
    }
    cout << endl;
     list<int>::iterator ptr;
    for (list<int>::iterator iter = lst.begin(); iter != lst.end(); *iter++)
    {
        cout << *iter << " ";
    }
    cout << endl;
    
 set<int> mySet;
for (list<int>::iterator iter = lst.begin(); iter != lst.end(); *iter++)
    {
        mySet.insert(*iter);
    }
   lst.clear();
  
   set<int>::iterator itSet=mySet.begin();
   for(;itSet!=mySet.end(); itSet++)
   {
lst.push_back(*itSet);
   }
for (list<int>::iterator iter = lst.begin(); iter != lst.end(); *iter++)
    {
        cout << *iter << " ";
    }
    
    cout << endl;    
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 21.11.2015
Сообщений: 5
21.11.2015, 19:39  [ТС]
Спасибо большое за помощь
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.11.2015, 19:42
Цитата Сообщение от Katysha_ Посмотреть сообщение
Спасибо большое за помощь
Не за что. Предложенный подход нивелирует преимущество списка. Все итераторы теряют валидность.
Лучше конечно Вам самой написать функцию поиска элемента. А в чём проблема?
0
0 / 0 / 0
Регистрация: 21.11.2015
Сообщений: 5
21.11.2015, 19:50  [ТС]
Я написала программу простенькую, которая находит повторяющиеся элементы и удаляет их, вот
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
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include <iostream>
#include <ctime>
#include <list>
#include <cstdlib>
using namespace std;
int main()
{
    const int size = 20;
    int array[size];
    int i, j;
    srand((unsigned)time(0));
    int count = 0;
 
    for (i = 0; i < size; i++)
        array[i] = rand() % 20;
 
    for (i = 0; i < size; i++)
        cout << array[i] << " ";
    cout << endl;
 
    for (i = 0; i < size; i++)
    {
        int temp = array[i];
 
        for (j = 0; j < size; j++)
            if (temp == array[j])
                count++;
        if (count == 1)
            cout << temp << " ";
        count = 0;
    }
    system("pause");
    cout << endl;
}
но преподаватель требует по новым стандартам языка С++
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.11.2015, 20:27
Katysha_, я не понял Ваш код с массивом. Вот "велосипедик", он не защищен от передачи невалидного итератора, но так быстрее. Если хотите добавьте вначале пробег по списку для выяснения является ли start указателем на какой-либо элемент и если нет возвращайте end()
И эта функция принимает не значение для поиска, а итератор элемента то есть заточена под задачу, но переделать несложно. Берите и приспосабливайте.

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
#include <iostream>
#include <ctime>
#include <list>
#include <set>
 
using namespace std;
//ищет *toFindTo начиная с start и если найдёт возвращает итератор находки а если не найдёт то end()
list<int>::iterator findInList(list<int> &lst, list<int>::iterator &start, list<int>::iterator &toFindTo)
{
    if(start==lst.end())return start;
list<int>::iterator ptr=start;
ptr++;
for(; ptr!=lst.end(); ptr++)
{
if(*ptr==*toFindTo)break;
}
return ptr;
}
 
int  main(void) {
srand((int)time(0));
    list<int> lst;
    int N = 20;
    for (int i = 0; i<N; ++i)
    {
        lst.push_back(rand() % 20);
    }
    cout << endl;
     list<int>::iterator ptr;
    for (list<int>::iterator iter = lst.begin(); iter != lst.end(); *iter++)
    {
        cout << *iter << " ";
    }
    cout << endl;
 
list<int>::iterator iterFound;
 for (list<int>::iterator iter = lst.begin(); iter != lst.end(); *iter++)
 {
iterFound= findInList(lst, iter, iter);
cout<<"try to find "<<*iter<<" found ";
if(iterFound!=lst.end())cout<<*iterFound;
else cout<<"noting";
cout<<endl;
 }
 
 
cout << endl;
    system("pause");
    return 0;
}
Может кто-то еще чего подкинет.
Удачи.
0
0 / 0 / 0
Регистрация: 21.11.2015
Сообщений: 5
21.11.2015, 20:48  [ТС]
Спасибо, Вам буду разбираться)
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.11.2015, 21:16
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
55
56
template<class T>
typename list<T>::iterator
findInList(list<T> &lst, typename list<T>::iterator &start, typename list<T>::iterator &toFindTo)
{
list<T>::iterator ptr=start;
for(; ptr!=lst.end(); ptr++)
{
if(*ptr==*toFindTo)break;
}
return ptr;
}
 
 
template<class T>
typename list<T>::iterator
findInList(list<T> &lst, typename list<T>::iterator &start, T toFindTo)
{
list<T>::iterator ptr=start;
for(; ptr!=lst.end(); ptr++)
{
if(*ptr==toFindTo)break;
}
return ptr;
}
 
int  main(void) {
srand((int)time(0));
    list<int> lst;
    int N = 20;
    for (int i = 0; i<N; ++i)
    {
        lst.push_back(rand() % 20);
    }
    cout << endl;
     list<int>::iterator ptr;
    for (list<int>::iterator iter = lst.begin(); iter != lst.end(); *iter++)
    {
        cout << *iter << " ";
    }
    cout << endl;
 
list<int>::iterator iterFound;
 for (list<int>::iterator iter = lst.begin(); iter != lst.end(); *iter++)
 {
     list<int>::iterator iterBeg=iter;
iterBeg++;//что бы себя не находила
iterFound= findInList(lst, iterBeg, iter);
cout<<"try to find "<<*iter<<" found ";
if(iterFound!=lst.end())cout<<*iterFound;
else cout<<"noting";
cout<<endl;
 }
cout << endl;
    system("pause");
    return 0;
}
Вот обобщённый и "перегруженный" (для значения) велосипед. Его можете запрячь прямо в свой код.
0
0 / 0 / 0
Регистрация: 21.11.2015
Сообщений: 5
21.11.2015, 22:01  [ТС]
Спасибо огромное, вы мне очень помогли с этой задачей
Можно у вас еще попросить о помощи с другими задачами, может подскажете что?

1. В заданном тексте найти и напечатать символы, встречающиеся
наиболее часто. Написала код опять же без новых стандартов, все работает
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
#include"stdafx.h"
#include<iostream>
using namespace std;
 
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    char a[]="";
    int  flag[15], k = 0, max, imax = 0;
 
    cout << "Заданныймассив: ";
    for (int i = 0; i<15; i++)
        cin >> a[i];
 
    for (int i = 0; i<15; i++)
        flag[i] = 0;
    for (int i = 0; i<14; i++)
    {
        if (flag[i] == 0)
        {
            for (int j = i + 1; j<15; j++)
                if (a[i] == a[j])
                {
                    k++;
                    flag[j] = k;
                }
            k = 0;
        }
        max = flag[0];
        for (int j = 0; j<15; j++)
        {
            if (flag[j]>max)
            {
                max = flag[j];
                imax = j;
            }
 
        }
 
    }
    
    cout << "Чаще встречается символ: " << a[imax] << endl;
    system("pause");
    return 0;
}
А вот как в новом стандарте сделать с использованием string не пойму


2. Создать массив размерностью 200 элементов со значениями от -50 до 50.
Определить среднюю длину непрерывных участков положительных чисел


А вот здесь хуже, никак не додумаюсь как вычислить эту среднюю длину и найти сами непрерывные участки
Вот все мои попытки
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include <iostream>
#include <ctime>
#include <vector>
using namespace std;
 
int main()
{
    srand(time(0));
    vector<int> mas;
    int N = 10, n = 0, cp = 0, pl = 0, i=0; 
    /*float srd = 0;*/
    for (int i = 0; i<N; ++i)
        mas.push_back(rand() % 100 - 50);
    cout << endl << "Ishodniy massiv:" << endl << endl;
    for (auto i : mas)
        cout << i << "   ";
    cout << endl << endl << endl;
    
 
    while (mas[i]>=0)
    {
        if (mas[i] < 0)
            
        pl++;
    }
    
 
 
    /*for (int i = 0; i < N; i++)
    {
        if (mas[i] >= 0)
 
            pl++;
    }
    for (int i = 0; i < N; i++)
    {
         if (mas[i] < 0)
        
            
            cp++;
    
        
        
    }
 
    pl += mas[i];
    n=pl / cp;*/
    
    /*for (int i = 0; i < N; i++)
    {
        if (mas[i] >= 0)
            pl++;
        else if (pl > 0)
            srd = (srd*cp+pl)/cp;
        cp++;
    }*/
    
    /*for (int i = 0; i<N; ++i)
    {
        if (mas[i] >= 0)
        n+=mas[i]; 
    }
 
    for (int i = 0; i<N; ++i)
    {
        if (mas[i] >= 0)
            sum++;
    }*/
 
    /*float srdl;
    srdl = n / sum;*/
    cout << "Srednyaya dlinna:" <<pl <<endl;
    cout << endl;
    system("pause");
    return 0;
}
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.11.2015, 22:15
Цитата Сообщение от Katysha_ Посмотреть сообщение
Спасибо огромное, вы мне очень помогли с этой задачей
Пожалуйста. Я не вполне понимаю в каком контексте тут упоминаются "новые" стандарты. Но главное, это то что форум это ещё и большая база данных. Вы можете искать ответы из поисковиков или разместив запрос непосредственно в поисковом поле форума. Вот почему правила предписывают писать один вопрос в одной теме и при этом стараться сочинить как можно более информативный заголовок. Потому как решенный вариант может помочь ещё кому-то, но ведь его надо для этого найти. Нет смысла в теме в которой куча разных задач, - найдут только титульную.
И потом это в Ваших же интересах начать новую тему, ибо немногим может захотеться помочь, видя перспективу получить "спасибо" без "чмоки-чмоки".
Только не вздумайте плюсовать, действительно.
Это я так шутю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.11.2015, 22:15
Помогаю со студенческими работами здесь

Удалить элементы, которые встречаются более одного раза
Вопрос состоит в следующем - мне нужно без цикла удалить абсолютно все повторяющиеся элементы. Функцией unique я воспользоваться не могу,...

Из массива удалить четные элементы, встречающиеся более одного раза
Из массива удалить четные элементы встречающиеся более одного раза. пример: массив a:9 3 4 9 1 0 0 =&gt; a:3 4 1

Из массива удалить элементы, встречающиеся в массиве более одного раза
Из массива удалить элементы, встречающиеся в массиве более одного раза. Пример: из массива A: 9 3 4 9 1 0 0 должен получиться массив A: ...

Из одного массива сформировать два: элементы встречающиеся один и более одного раза в исходном массиве
Из исходного массива сформировать два новых: первый из элементов, которые встречаются по 1 разу и второй - из элементов, встречающихся...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru