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

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

22.11.2015, 17:00. Показов 2476. Ответов 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.01.2016, 22:28
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от RAFA91 Посмотреть сообщение
нет не лучше так как у нас вижуал 8
и что? splice и в c++98 есть.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. Сразу отвечу: А в PvP с ним. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru