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

Аварийное завершение программы при использовании метода merge для list

22.11.2015, 17:00. Показов 1546. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста почему в строке 10 получаю аварийное завершение ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int _tmain(int argc, _TCHAR* argv[])
{
    list<int> l(10);
    list<int> :: iterator p,k,t;
    int i=0;
    cout<<"size = "<<l.size()<<endl;
    for (p=l.begin();p!=l.end();p++,i++) *p = (i+10);
    list<int> l2(5);
    for (i=0,p=l2.begin();p!=l2.end();p++,i++) *p = 20-i;
    l.merge(l2);
    
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.11.2015, 17:00
Ответы с готовыми решениями:

Аварийное завершение программы
#include &quot;B.h&quot; #include &quot;D1.h&quot; #include &quot;D2.h&quot; #include &lt;iostream&gt; #include &lt;typeinfo&gt; ...

Аварийное завершение программы
Программа завершается аварийно, но в файл записывает требуемую информацию. Укажите косяки. В...

Аварийное завершение работы программы
1)программа работает правильно но когда нажимаю ентер (после этого она должна завершить работу)...

Ошибка. Аварийное завершение программы.
Товарищи,есть функция.. cor find(cor start) { cor buf=start; cor pv=NULL; char adr; int...

35
Заблокирован
22.11.2015, 17:35  [ТС] 2
вроде все передал в метод как тут
Миниатюры
Аварийное завершение программы при использовании метода merge для list  
0
Заблокирован
22.11.2015, 17:37  [ТС] 3
---
Миниатюры
Аварийное завершение программы при использовании метода merge для list  
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
22.11.2015, 17:49 4
описание забыли видимо почитать
1
Заблокирован
22.11.2015, 18:05  [ТС] 5
читал я это. хотя там что-то идет про упорядочение.

сначала нужно
C++
1
list<int> l2(5);
отсортировать ?
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
22.11.2015, 18:08 6
интернет подсказывает что и l и l2
1
Заблокирован
22.11.2015, 18:16  [ТС] 7
Цитата Сообщение от Dimension Посмотреть сообщение
интернет подсказывает что и l и l2
оба надо отсортировать по возрастанию или наоборот ?
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
22.11.2015, 18:18 8
по возрастанию
C++
1
2
3
l.sort();
l2.sort()
l.merge(l2);
1
Заблокирован
23.11.2015, 15:56  [ТС] 9
Цитата Сообщение от Dimension Посмотреть сообщение
по возрастанию
а если я возьму обьекты . по какому критерию мне их сортировать нужно чтобы merge() не ругалась

Добавлено через 21 час 30 минут
кто знает какой алгоритм сортировки элементов используется в списке ?
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
23.11.2015, 16:15 10
merge sort
1
Заблокирован
23.11.2015, 16:17  [ТС] 11
Цитата Сообщение от Dimension Посмотреть сообщение
stable или merge , может их смесь
это половинного деления ?
0
Заблокирован
09.01.2016, 17:04  [ТС] 12
решил применить алгоритм
C++
1
sort(l.begin(),l.end());
к списку и получил косяк.

operator < имеется .

почему этот алгоритм не работает со списком ?

есть в принципе в списке свой метод sort , но мне надо иметь возможность сортировать по кускам.
0
Неэпический
18113 / 10700 / 2062
Регистрация: 27.09.2012
Сообщений: 26,946
Записей в блоге: 1
09.01.2016, 17:06 13
Цитата Сообщение от RAFA91 Посмотреть сообщение
почему этот алгоритм не работает со списком ?
Потому что итераторы не те.
0
Заблокирован
09.01.2016, 17:08  [ТС] 14
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что итераторы не те.
так что он только для вектора приемлем ?
0
Неэпический
18113 / 10700 / 2062
Регистрация: 27.09.2012
Сообщений: 26,946
Записей в блоге: 1
09.01.2016, 17:11 15
Цитата Сообщение от RAFA91 Посмотреть сообщение
так что он только для вектора приемлем ?
sort требует random-access итераторы,
у list'а же итераторы bidirectional.
1
Заблокирован
09.01.2016, 17:33  [ТС] 16
для решения этой проблемы нужно часть обьектов из списка подлежащих сортировке передавать в вектор ?

Добавлено через 17 минут
на ум пришло только это
C++
1
2
3
4
5
vector<point> v(l.begin(),l.end());
l.clear();
    sort(v.begin(),v.end());
    copy(v.begin(),v.end(),l.begin());
v.clear();
может есть какой-то эффективный способ сортировки списка ?

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

потом опять все передавать назад в список.
0
Неэпический
18113 / 10700 / 2062
Регистрация: 27.09.2012
Сообщений: 26,946
Записей в блоге: 1
09.01.2016, 17:59 17
Можно соорудить какой-нибудь адаптер
1
Заблокирован
09.01.2016, 18:02  [ТС] 18
Цитата Сообщение от Croessmah Посмотреть сообщение
Можно соорудить какой-нибудь адаптер

уж лучше тогда через вектор. )))
0
Неэпический
18113 / 10700 / 2062
Регистрация: 27.09.2012
Сообщений: 26,946
Записей в блоге: 1
09.01.2016, 18:48 19
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//Title of this code
//g++  4.9.2
 
#include <iostream>
#include <algorithm>
#include <list>
#include <iterator>
 
 
 
template<typename Cont>
class BItoRA : std::random_access_iterator_tag
{
public:
    using Iterator = typename Cont::iterator ;
    using difference_type = typename Iterator::difference_type ;
    using value_type = typename Iterator::value_type ;
    using pointer = typename Iterator::pointer ;
    using reference = typename Iterator::reference ;
    using iterator_category = typename Iterator::iterator_category ;
    
    BItoRA(const Iterator& it, const Iterator& it_end)
        : it_end_(it_end)
        , it_(it)
    {}
       
    
    BItoRA operator+(difference_type d) const
    {
        Iterator it(it_) ;
        std::advance(it, d) ;
        return BItoRA(it, it_end_) ;
    }
    
    BItoRA operator-(difference_type d) const
    {
        Iterator it(it_) ;
        std::advance(it, -d) ;
        return BItoRA(it, it_end_) ;
    } 
    
    BItoRA operator++(int) 
    {
        return BItoRA(it_++, it_end_) ;
    } 
    
    
    BItoRA & operator++() 
    {
        ++it_ ;
        return *this ;
    } 
    
    
    BItoRA operator--(int) 
    {
        return BItoRA(it_--, it_end_) ;
    } 
    
    
    BItoRA & operator--() 
    {
        --it_ ;
        return *this ;
    } 
    
    
    difference_type operator-(const BItoRA& rhv) 
    {
        if( *this<rhv )
            return -std::distance(it_, rhv.it_) ;
        return std::distance(rhv.it_, it_) ;
    } 
 
    
    bool operator<(const BItoRA& rhv) 
    {
        return std::distance(rhv.it_, rhv.it_end_) < std::distance(it_, it_end_) ;
    } 
 
    
    bool operator==(const BItoRA& rhv) const
    {
        return it_ == rhv.it_ ;
    }
    
    
    bool operator!=(const BItoRA& rhv) const
    {
        return it_ != rhv.it_ ;
    }
    
    reference operator*()
    {
        return *it_ ;
    }
    
    pointer operator->()
    {
        return &*it_ ;
    }
    
    
    
private:
    Iterator it_end_ ;
    Iterator it_ ;
} ;
 
 
 
int main()
{
    std::list<int> lst {3, 7, 8, 9, 3, 1, 7, 8, 2, 4, 6, 5, 8} ;
    auto iter_beg = lst.begin() ;
    auto iter_end = lst.end() ;
    std::advance(iter_beg, 5) ;
    std::advance(iter_end, -2) ;
    auto beg = BItoRA<std::list<int>>(iter_beg, lst.end()) ;
    auto end = BItoRA<std::list<int>>(iter_end, lst.end()) ;
    std::sort(beg, end) ;
    for(auto e: lst)
        std::cout << e << ' ' ;
}
http://rextester.com/UYOYV19653

но пахнет дурно...

Цитата Сообщение от RAFA91 Посмотреть сообщение
уж лучше тогда через вектор.
тогда уж лучше splice:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//Title of this code
//g++  4.9.2
 
#include <iostream>
#include <list>
#include <iterator>
 
int main()
{
    std::list<int> lst {3, 7, 8, 9, 3, 1, 7, 8, 2, 4, 6, 5, 8} ;
    auto iter_beg = lst.begin() ;
    auto iter_end = lst.end() ;
    std::advance(iter_beg, 5) ;
    std::advance(iter_end, -2) ;
    std::list<int> tmp_lst ;
    tmp_lst.splice(tmp_lst.begin(), lst, iter_beg, iter_end) ;
    tmp_lst.sort() ;
    iter_beg = lst.begin() ;
    std::advance(iter_beg, 5) ;
    lst.splice(iter_beg, tmp_lst) ;
    for(auto e: lst)
        std::cout << e << ' ' ;
}
http://rextester.com/QTHU54921
4
Заблокирован
10.01.2016, 18:03  [ТС] 20
Цитата Сообщение от Croessmah Посмотреть сообщение
тогда уж лучше splice:

нет не лучше так как у нас вижуал 8
0
10.01.2016, 18:03
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2016, 18:03
Помогаю со студенческими работами здесь

Рекурсивная функция/аварийное завершение программы
Всем привет. Задание такое: есть вырожение Нужно найти такое х, с погрешность 1e-7 или больше,...

Abnormal program termination (аварийное завершение программы)
Из за чего программа может выдать abnormal program termination (аварийное завершение программы),...

Аварийное завершение программы (Прата, глава 12, string1)
Доброго времени суток. Не могу понять, из-за чего происходит аварийное завершение программы. VS...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Почему при инициализации массива 3х3х3 будет создано 13 одномерных массивов?
Alexander-7 16.01.2025
При инициализации многомерного массива, в данном случае трехмерного массива размерностью 3x3x3, может возникнуть путаница относительно того, как структура данных организована в памяти. Общее число. . .
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru