Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
#1

list.merge( - C++

23.09.2011, 11:44. Просмотров 1067. Ответов 4
Метки нет (Все метки)

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
// list_merge.cpp
  // compile with: /EHsc
#include "stdafx.h"
  #include <list>
  #include <iostream>
  
  int main( ) 
  {
     using namespace std;
     list <int> c1, c2, c3;
     list <int>::iterator c1_Iter, c2_Iter, c3_Iter;
     
     c1.push_back( 3 );
     c1.push_back( 6 );
     c2.push_back( 2 );
     c2.push_back( 4 );
     c3.push_back( 5 );
     c3.push_back( 1 );
     //то что ниже добавлено мной, дабы убедиться получу ли я ошибку такую же как в своем примере.если закомментить добавления то ошибки не будет
      c3.push_back( 1112);
       c3.push_back( 323);
        c3.push_back( 124331 );
        // далее все без изменений - пример их хэлпа по студии 10
  
     cout << "c1 =";
     for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
        cout << " " << *c1_Iter;
     cout << endl;
  
     cout << "c2 =";
     for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
        cout << " " << *c2_Iter;
     cout << endl;
  
     c2.merge( c1 );  // Merge c1 into c2 in (default) ascending order
     c2.sort( greater<int>( ) );
     cout << "After merging c1 with c2 and sorting with >: c2 =";
     for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
        cout << " " << *c2_Iter;
     cout << endl;
  
     cout << "c3 =";
     for ( c3_Iter = c3.begin( ); c3_Iter != c3.end( ); c3_Iter++ )
        cout << " " << *c3_Iter;
     cout << endl;
  
     c2.merge( c3, greater<int>( ) );
     cout << "After merging c3 with c2 according to the '>' comparison relation: c2 =";
     for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
        cout << " " << *c2_Iter;
     cout << endl;
 
return 0;
  }

данный код это копи паст из хелпа по студии 10 на тему list.merge().

Вопрос в следующем. Читая про объединение я понял что перед слиянием списки надо отсортировать, и да после этого оно работает. Так же Страуаутсруп пишет что можно слить списки если один не отсортирован(просто поярдок не определен будет) - тоже в дебаге вылетает на ошибку. Так же имеется второй параметр при сортировке - можно как бы задать критерий. И тут в дебаге я натолкнулся на постоянно вылетающую ошибку - последовательность (порядок) не задан. Полез в хелп и там увидел этот пример. И да он работает, но если добавить в список 3 еще несколько циферок, то в дебаге выскочит та же ошибка. Может кто подскажет пачему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2011, 11:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос list.merge( (C++):

Аварийное завершение программы при использовании метода merge для list - C++
Подскажите пожалуйста почему в строке 10 получаю аварийное завершение ? int _tmain(int argc, _TCHAR* argv) { list&lt;int&gt; l(10); ...

Ошибка при компиляции undefined reference to `List<int>::List()'| - C++
Доброго времени суток=) столкнулась с такой проблемой нужно написать шаблон класса. При компиляции выдает ошибку undefined reference to...

у меня созданы 2 фаила - один с классом (называется list.h), а другой с реализациями функций (list.cpp). - C++
у меня созданы 2 фаила - один с классом (называется list.h), а другой с реализациями функций (list.cpp). хочу создать клиентский фаил...

Записать в файл list (очередь) объектов, в которых содержатся строки string, и считать с файла обратно в list - C++
Извините подскажите пожалуйста, как записать list(очередь) объектов в которых содержаться string, и считать с файла обратно в list;...

Реализация std::list, сложность list::size() - C++
Часто приходилось пользоваться Listом, но сейчас столкнулся с небольшой неоднозначностью. Согласно документации, метод size() в 11...

Merge sort - C++
Было 100500 раз, знаю. Видел коды, но всеравно не понимаю. У меня есть класс Array. class Array { private: int *arr; public: ...

4
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
23.09.2011, 11:46  [ТС] #2
вот ошибка
0
Миниатюры
list.merge(  
kazak
3057 / 2378 / 160
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
23.09.2011, 12:01 #3
Цитата Сообщение от AzaKendler Посмотреть сообщение
последовательность (порядок) не задан
Правильно будет "Последовательность не упорядочена"
Цитата Сообщение от AzaKendler Посмотреть сообщение
И да он работает, но если добавить в список 3 еще несколько циферок, то в дебаге выскочит та же ошибка.
Если ты внимательно присмотришься, то увидишь, что в исходном коде все списки упорядочены. Первые два по возрастанию, последний по убыванию. А вот добавление своих циферок в последний список упорядоченность нарушают.
Цитата Сообщение от AzaKendler Посмотреть сообщение
Так же Страуаутсруп пишет что можно слить списки если один не отсортирован(просто поярдок не определен будет) - тоже в дебаге вылетает на ошибку.
Компиляторы не всегда "слушают" Страуструпа. Тут все зависит от прихоти разработчика.
1
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
23.09.2011, 12:11  [ТС] #4
c2.merge( c3, greater<int>( ) );
разве эта строчка не "пытается" отсортировать на ходу при последнем объединении? Сбой происходит именно на этом, если добавить в 3й список циферок. И мне показалось что сюда 3й список приходит все таки не отсортированным

Добавлено через 2 минуты
Цитата Сообщение от kazak Посмотреть сообщение
А вот добавление своих циферок в последний список упорядоченность нарушают
кажется понял....
короче говоря фуфло это. лучше сразу готовить списки до объединения.

Добавлено через 1 минуту
ты прав...
C++
1
2
3
4
5
6
7
c3.push_back( 50 );
     c3.push_back( 49 );
     //то что ниже добавлено мной, дабы убедиться получу ли я ошибку такую же как в своем примере.
      c3.push_back( 46);
       c3.push_back( 43);
        c3.push_back( 12 );
        // далее все без изменений - пример их хэлпа по студии 10
так..работает
0
kazak
3057 / 2378 / 160
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
23.09.2011, 12:20 #5
Насколько я понял msdn, greater не сортирует входной список, а задает порядок элементов в выходном списке.
И выдержка по поводу упорядоченности для merge
Both sequences must be previously ordered by operator<
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2011, 12:20
Привет! Вот еще темы с ответами:

Merge Sort - C++
написал реализацию Merge Sort но что то не так получилось))) помогите найти ошибку ) using namespace std; void Merge(int ,int ,int...

Merge и сортировка - C++
Почему merge не сортирует массив в алфавитном порядке? c:

Merge sort - C++
Здравствуйте, пытаюсь написать сортировку по методу слияния (merge). не получается, подскажите пожалуйста в чем ошибка? void...

Не рабочий merge() - C++
Подскажите пожалуйста почему данная программа напрочь отказывается работать ? #include&lt;iostream&gt; #include&lt;algorithm&gt; using...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru