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

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

22.11.2015, 17:00. Показов 1536. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,895
Записей в блоге: 1
09.01.2016, 17:06 13
Цитата Сообщение от RAFA91 Посмотреть сообщение
почему этот алгоритм не работает со списком ?
Потому что итераторы не те.
0
Заблокирован
09.01.2016, 17:08  [ТС] 14
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что итераторы не те.
так что он только для вектора приемлем ?
0
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,895
Записей в блоге: 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
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,895
Записей в блоге: 1
09.01.2016, 17:59 17
Можно соорудить какой-нибудь адаптер
1
Заблокирован
09.01.2016, 18:02  [ТС] 18
Цитата Сообщение от Croessmah Посмотреть сообщение
Можно соорудить какой-нибудь адаптер

уж лучше тогда через вектор. )))
0
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,895
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2016, 18:03
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru