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

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

22.11.2015, 17:00. Показов 1918. Ответов 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
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
10.01.2016, 22:28
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от RAFA91 Посмотреть сообщение
нет не лучше так как у нас вижуал 8
и что? splice и в c++98 есть.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
11.01.2016, 02:46
Цитата Сообщение от RAFA91 Посмотреть сообщение
а то выходит надо передавать все обьекты списка в вектор , а уж с вектором делать частичную сортировку.
Если важен порядок доступа то можно передать в вектор указатели на объекты в списке. Это возможно потому что список гарантирует постоянство адресов (валидность итераторов). Это не потребует большого объёма копирования, а скорость сортировки возрастёт. Профит тем больше чем больше размер типа. То есть для int всё равно плохо.
Это я к тому, что у Вас <int> только вначале. Потом он вырос до <point> и глядишь может стать и <part_of_universe>. Тогда такой подход подойдёт. Однако потом всё равно придётся создать новый список.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
11.01.2016, 16:45  [ТС]
а сам список поддерживает частичную сортировку (двумя итераторами)?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
11.01.2016, 17:00
Цитата Сообщение от RAFA91 Посмотреть сообщение
а сам список поддерживает частичную сортировку (двумя итераторами)?
Что ты несёшь. Попробуй подумать.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
11.01.2016, 17:10  [ТС]
полную же поддерживает. ладно попробуем с list::splice
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
12.01.2016, 17:48  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
тогда уж лучше splice:

да .... наверное все же splice: только не понял этой конструкции

C++
1
for(auto e: lst)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
12.01.2016, 17:56
Цитата Сообщение от RAFA91 Посмотреть сообщение
да .... наверное все же splice: только не понял этой конструкции
это range-based for statement, появившийся в C++11.
В данном случае проходим по всему списку.
0
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
13.01.2016, 16:51  [ТС]
задача стояла следующим образом:

в файле имелось пара значений x,y (координаты точки). нужно было отсортировать эти координаты сначала по оси

y а потом по x (при y = const).-------> (12,45),(13,45),(14,45)................. ......

тут и пришла в голову частичная сортировка.

в общем вот что вышло.

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
struct point
{
    int x,y;
    point() : x(0),y(0) {}
    point(int _x, int _y) : x(_x),y(_y) {} 
};
 
bool operator < (const point &a, const point &b)
{
    return a.y < b.y;
}
 
bool sort_x (const point &a, const point &b)
{
    return a.x < b.x;
}
 
void sort_list(list<point> &l)
{
    list<point> temp;
    l.sort();
    bool flag = false;
    list<point> :: iterator p_begin,p_end;
    p_end = l.begin();
    while (p_end != l.end())
    {
        flag = false;
        p_begin = p_end;
        p_end++;
        while (p_end != l.end())
        {
            if (p_begin->y == p_end->y) flag = true;
            else break;
            p_end++;
        }
        if (flag)
        {
            temp.splice(temp.begin(),l,p_begin,p_end);
            temp.sort(sort_x);
            l.splice(p_end,temp);
        }
    }
}
 
void show(list<point> &l)
{
    list<point> :: iterator p = l.begin();
    while (p != l.end())
    {
        cout<<"x = "<<p->x<<" y = "<<p->y<<endl<<endl;
        p++;
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    list<point> l;
    int x,y;
    int i=0;
    ifstream in;
    in.open("list_sort.txt");
    if (!in) { cout <<"error list_sort.txt"<<endl; return 1; }
    //if ( in.peek() == EOF) cout <<"eof"<<endl;
    while (!in.eof())
    {
        in >> x;
        in >> y;
        l.push_back(point(x,y));
    }
    in.close();
    show(l);
    cout<<"sort"<<endl;
    sort_list(l);
    show(l);
 
    return 0;
}
может кто-то может предложить короткую версию функции
C++
1
void sort_list(list<point> &l)
чувствую там могут быть мины)))
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
13.01.2016, 17:08
Цитата Сообщение от RAFA91 Посмотреть сообщение
нужно было отсортировать эти координаты сначала по оси
y а потом по x
В смысле, если иксы одинаковые, то сортировать такие по y?
Тогда вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool pred (const point &a, const point &b)
{
    if ( a.x < b.x )
        return true ;
    return a.x == b.x && a.y < b.y ;
}
 
//...
    show(l);
    cout<<"sort"<<endl;
    l.sort(pred) ;
    show(l);
Добавлено через 4 минуты
Цитата Сообщение от RAFA91 Посмотреть сообщение
может кто-то может предложить короткую версию функции
перегрузить операторы?
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
#include <list>
#include <iostream>
#include <iterator>
 
using namespace std ;
 
struct point
{
    int x,y;
    point() : x(0),y(0) {}
    point(int _x, int _y) : x(_x),y(_y) {} 
};
 
 
bool pred (const point &a, const point &b)
{
    if ( a.x < b.x )
        return true ;
    return a.x == b.x && a.y < b.y ;
}
 
 
 
std::ostream& operator<<(std::ostream& stream, const point & p)
{
    return stream <<"x = "<<p.x<<" y = "<<p.y<<endl ;
}
 
 
template<typename T>
std::ostream& operator<<(std::ostream& stream, const std::list<T> & lst)
{
    std::copy(lst.begin(), lst.end(), std::ostream_iterator<point>(stream, "\n")) ;
    return stream ;
}
 
 
 
 
int main()
{
    list<point> l = // initialize
        {
        point(9,2),
        point(1,6),
        point(2,3),
        point(4,2),
        point(1,4),
        point(5,0),
        point(6,9),
        point(1,7)
        };
    
    cout << l ;
    cout<<"sort"<<endl;
    l.sort(pred) ;
    cout << l ;
 
    return 0;
}
http://rextester.com/ALB64603
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
14.01.2016, 16:14  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
если иксы одинаковые,
Я же писал сначала нужно отсортировать по y , а потом по x , если они имеют одинаковую y

при сортировке по y может выйти так ..................(10,45),(9,45),(8,45). .............

а должно быть так ..................(8,45),(9,45),(10,45). .............



C++
1
void sort_list(list<point> &l)
в принципе это делает , но может кто-то предложит оптимальный вариант.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
14.01.2016, 16:19
Цитата Сообщение от RAFA91 Посмотреть сообщение
в принципе это делает , но может кто-то предложит оптимальный вариант.
вон, предикат Выше переделайте и всё норм будет.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
bool pred (const point &a, const point &b)
{
    if ( a.y < b.y )
        return true ;
    return a.y == b.y && a.x < b.x ;
}
http://rextester.com/KCFQ19526
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
15.01.2016, 15:55  [ТС]
Croessmah благодарю Вас за предоставленный предикат.

результат тот-же. выходит и делить на части не нужно.)))

не знал что в предикат можно тулить несколько условий сортировки.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
15.01.2016, 15:59
RAFA91, да хоть показ видео для взрослых....

Добавлено через 1 минуту
Итого: достаточно было сразу написать что хотите получить.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
15.01.2016, 16:02  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
a.y == b.y && a.x < b.x ;

тут как я понял идет перестановка ?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
15.01.2016, 16:25
Какая перестановка? Если y координаты равны, то сравниваем по x. Вот и всё
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
15.01.2016, 16:54  [ТС]
кстати a и b это соседние элементы списка ?

Добавлено через 10 минут
а что если
C++
1
2
if ( a.y == b.y ) return a.x < b.x ;
      return a.y < b.y ;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2016, 16:54
Помогаю со студенческими работами здесь

Ошибка. Аварийное завершение программы.
Товарищи,есть функция.. 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 --...

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


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
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