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

Я зашёл в тупик. Я не понимаю как работает erase()!

27.09.2020, 20:07. Показов 1309. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мой список: 9 7 5 3 1 2 4 6 8 10 -1 100
Хочу отсортированный список: -1 1 2 3 4 5 6 7 8 9 10 100

(знаю, что есть sort(), но нужно самому сортировку простую написать)
если вместо
C++
1
unsorted.erase(mini);
написать
C++
1
unsorted.remove(*mini);
то всё работает нормально, но только в том случае, если в списке все значения уникальны, а мне нужно вернуть именно точно такой же список, но отсортированный.

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
#include <iostream>
#include <list>
#include <iterator>
 
using namespace std;
 
list<int> ::iterator minElement(list <int> unsorted)
{
    list <int> ::iterator it;
    list <int> ::iterator mini = unsorted.begin();
    for(it = unsorted.begin(); it != unsorted.end();it++)
    {
        if(*it < *mini) *mini = *it;
    }
    return mini;
};
 
list<int> sorting(list <int> unsorted)
{
    list<int> sorted;
    list<int> ::iterator it, mini = minElement(unsorted);
    int len = unsorted.size();
    for(int i = 0; i < len; i++)
    {
        sorted.push_back(*mini);
        it = unsorted.erase(mini);
        cout << *it << " ";
        mini = minElement(unsorted);
        //cout << *mini;
    }
    return sorted;
}
 
int main()
{
    list <int> spisok;
    list <int> ::iterator it;
    for(int i = 1; i < 11; i++)
    {
        if(i % 2 == 0)
        {
            spisok.push_back(i);
        }
        else
        {
            spisok.push_front(i);
        }
    }
    spisok.push_back(-1);
    spisok.push_back(100);
    for(it = spisok.begin(); it != spisok.end(); it++)
    {
        cout << *it << ' ';
    }
    list <int> ::iterator mini = minElement(spisok);
    /*
    for(it = Result.begin(); it != Result.end(); it++)
    {
        cout << *it << ' ';
    }
    */
    cout << endl;
    list <int> Result = sorting(spisok);
    cout << endl;
    for(it = Result.begin(); it != Result.end(); it++)
    {
        cout << *it << ' ';
    }
 
 
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2020, 20:07
Ответы с готовыми решениями:

Зашел в тупик!
Имеется задача http://acmp.ru/index.asp?main=task&amp;id_task=234 . Имеется ее решение: #include &lt;stdio.h&gt; #include &lt;iostream&gt; ...

Зашел в тупик
Из-за формулы зашел немного в тупик. Вот здесь знаменатель не должен быть равен 0 и само выражение под корнем должно быть положительным. ...

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

8
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.09.2020, 20:16
Цитата Сообщение от cherN1ka Посмотреть сообщение
C++
1
if(*it < *mini) *mini = *it;
C++
1
if(*it < *mini) mini = it;
иначе итератор вообще не вернётся. Компилятор возмутится.
0
0 / 0 / 0
Регистрация: 21.03.2020
Сообщений: 12
27.09.2020, 20:28  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
if(*it < *mini) mini = it;
Спасибо, этот момент я понял, однако всё равно как задумано не работает
У меня получается (на моём примере) в sorted добавляется -1, потом из unsorted -1 удаляется (якобы) и erase возвращает 100 (всё верно). Но дальше при
C++
1
mini = minElement(unsorted);
mini почему то снова -1, хотя в unsorted уже нет -1.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
27.09.2020, 20:31
Цитата Сообщение от cherN1ka Посмотреть сообщение
unsorted уже нет -1.
значит не std::size_t
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.09.2020, 20:44
Цитата Сообщение от cherN1ka Посмотреть сообщение
l
C++
1
2
3
4
5
ist<int> ::iterator it, mini = minElement(unsorted);
 int len = unsorted.size();
 for(int i = 0; i < len; i++)
 {
 sorted.push_back(*mini);
Нашли итератор на минимальный, а потом ещё len раз его добавили...
cherN1ka, напишите описание своего плана. Каждую строку откомментируйте (описав - что по вашему она делает и как это способствоет вашему плану стать реальностью). Иначе нет смысла это смотреть.
0
0 / 0 / 0
Регистрация: 21.03.2020
Сообщений: 12
27.09.2020, 20:51  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
cherN1ka, напишите описание своего плана.
C++
1
2
3
4
5
6
7
8
9
10
11
12
list<int> sorting(list <int> unsorted)
{
    list<int> sorted; 
    list<int> ::iterator it, mini = minElement(unsorted); // в mini вернулся минимальный из unsorted (-1)
    int len = unsorted.size(); //длину нашего списка нашли, чтоб перебрать все элементы из unsorted
    for(int i = 0; i < len; i++)
    {
        sorted.push_back(*mini); // в sorted добавили наш -1
        unsorted.erase(mini); // из unsorted удалили -1 (теперь список 9 7 5 3 1 2 4 6 8 10 100)
        mini = minElement(unsorted); // в mini вернулся минимальный из unsorted (уже просто 1) и потом его добавили в sorted, удалили из unsorted и тд
    }                                               // дальше в цикле, из unsorted минимальный удаляем, его в sorted добавляем.
    return sorted;
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.09.2020, 21:10
del
0
0 / 0 / 0
Регистрация: 21.03.2020
Сообщений: 12
27.09.2020, 21:13  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вы там нашли -1 потом добавили.
Как? Я же в список unsorted нигде не добавлял элементов, почему туда ещё одна -1 добавляется? Я не понимаю как это тогда вообще работает!
Ни в каких примерах erase Нигде ничего не добавляет, функция minElement не добавляет в этот список элемент, sorted - другой список, никак не связанный с unsorted, в который и добавляются элементы из unsorted, вроде как, но я похоже вообще представления о написанном не имею
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.09.2020, 21:37
Лучший ответ Сообщение было отмечено cherN1ka как решение

Решение

cherN1ka, передали список в функцию поиска минимума по значению и получили дохлый итератор. Передайте список по ссылке.

Добавлено через 1 минуту
Цитата Сообщение от cherN1ka Посмотреть сообщение
Как? Я же в список unsorted нигде не добавлял элементов, почему туда ещё одна -1 добавляется?
я невнимательно посмотрел. У вас там 2 разных списка.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.09.2020, 21:37
Помогаю со студенческими работами здесь

Зашел в тупик с отчетом...
Добрый вечер, уважаемые форумчане... Прочитал всю ветку данного раздела форума на слово &quot;отчет&quot; по поиску, но не смог решить...

Зашел в тупик с курсовой
Проблема в том что надо создать базу которая будет фиксировать пропуск учащихся занятий и потом выводить отчет за день (с этим я справился)...

Зашел в тупик на фреймворках
Уважаемые форумчане.....начал изучение питона...вроде все хорошо, но столкнулся с фласком и затупил...я вот понял как работает в питоне...

Зашел в тупик с выбором ноутбука
Решил приобрести свой первый ноут и остановился на 3 вариантах : 1). Asus K56CM (K56CM-XX055D) ...

Люди, помогите, зашел в тупик!
Уважаемые! Есть сайт http://setun-alg.ru/ оптимизирую его уже в течение месяца. до этого был - http://setun-alg.ru/index2.html ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru