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

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

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

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста почему в строке 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; using namespace std; class B ...

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

Аварийное завершение работы программы
1)программа работает правильно но когда нажимаю ентер (после этого она должна завершить работу) выбивает Run-Time Check Failure #2 - Stack...

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

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

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

operator < имеется .

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

есть в принципе в списке свой метод sort , но мне надо иметь возможность сортировать по кускам.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.01.2016, 17:06
Цитата Сообщение от RAFA91 Посмотреть сообщение
почему этот алгоритм не работает со списком ?
Потому что итераторы не те.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
09.01.2016, 17:08  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что итераторы не те.
так что он только для вектора приемлем ?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.01.2016, 17:11
Цитата Сообщение от RAFA91 Посмотреть сообщение
так что он только для вектора приемлем ?
sort требует random-access итераторы,
у list'а же итераторы bidirectional.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
09.01.2016, 17:33  [ТС]
для решения этой проблемы нужно часть обьектов из списка подлежащих сортировке передавать в вектор ?

Добавлено через 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
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.01.2016, 17:59
Можно соорудить какой-нибудь адаптер
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
09.01.2016, 18:02  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Можно соорудить какой-нибудь адаптер

уж лучше тогда через вектор. )))
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.01.2016, 18:48
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
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
10.01.2016, 18:03  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
тогда уж лучше splice:

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru