Форум программистов, компьютерный форум CyberForum.ru

Массив: Найти первый максимум в этом массиве, а затем все числа до этого элемента упорядочить по возрастанию, а после — по убыванию. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подскажите бесплатный игровой движок под с++ http://www.cyberforum.ru/cpp-beginners/thread641248.html
Подскажите бесплатный игровой движок под с++
C++ Вычислить с помощью функции вот такая задачька http://www.cyberforum.ru/cpp-beginners/thread641247.html
Структура C++
Как использовать структура, объявленную в другом файле. К примеру что бы использовать переменные нужно прописать extern
C++ Xor или что-то ещё?
Не могу понять, что делает "XOR" (или что это ещё) в данной функции, созданной Window Forms : private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { }
C++ Метод remove_if STL http://www.cyberforum.ru/cpp-beginners/thread641239.html
Всем привет! Не могу понять почему вылезает ошибка при использовании remove_if для list. ошибка Error 1 error C3867: 'CableTV::HelpDeleteChannels': function call missing argument list; use '&CableTV::HelpDeleteChannels' to create a pointer to member c:\documents and settings\304-03\мои документы\visual studio 2010\projects\examwinapi\examwinapi\examwinapi.cpp 895 Код
C++ Атрибуты прав при создании директории Пишу mkdir("dir0777",0777); mkdir("dir0770",0770); mkdir("dir0707",0707); mkdir("dir0077",0077); Для владельца - права устанавливаются правильно. Для группы и "остальных" - для всех директорий оказывается нет права на запись. В чём дурь? подробнее

Показать сообщение отдельно
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
23.08.2012, 20: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
#include <iostream>
 
#include <boost/mpl/vector.hpp>
#include <boost/mpl/max_element.hpp>
#include <boost/mpl/for_each.hpp>
#include <boost/mpl/sort.hpp>
#include <boost/mpl/less.hpp>
#include <boost/mpl/greater.hpp>
#include <boost/mpl/copy.hpp>
#include <boost/mpl/back_inserter.hpp>
 
namespace mpl = boost::mpl;
 
struct PrintSeq {
   template <typename T>
   void operator()(T val) {
      std::cout << val << " ";
   }
};
 
template <typename Seq>
struct MaxElement {
   typedef typename
      mpl::max_element <
         Seq
      >::type type;
};
 
template <typename Seq, typename First, typename Last>
struct GenerateSeq {
   typedef typename
      GenerateSeq <
         typename mpl::push_back <
            Seq,
            mpl::int_<
               mpl::deref <First>::type::value
            >
         >::type,
         typename mpl::next <First>::type,
         Last
      >::type type;
};
 
template <typename Seq, typename Last>
struct GenerateSeq <Seq, Last, Last> {
   typedef Seq type;
};
 
template <typename Seq>
struct ChangeSeq {
   typedef typename
      GenerateSeq <
         mpl::vector <>,
         typename mpl::begin <Seq>::type,
         typename mpl::next <
            typename mpl::max_element <
               Seq
            >::type
         >::type
      >::type v_start;
      
   typedef typename
      GenerateSeq <
         mpl::vector <>,
         typename mpl::next <
            typename mpl::max_element <
               Seq
            >::type
         >::type,
         typename mpl::end <Seq>::type
      >::type v_end;
};
 
template <typename Seq, typename Cmp = mpl::greater <mpl::_1, mpl::_2>>
struct SortSeq {
   typedef typename
      mpl::sort <
         Seq,
         Cmp
      >::type sort_seq;
};
 
template <typename SeqFirst, typename SeqSecond>
struct Concatenate {
   typedef typename
      mpl::copy <
         SeqSecond,
         mpl::back_inserter <
            SeqFirst
         >
      >::type v_concat;
};
 
int main() {
   typedef mpl::vector <
      mpl::int_ <-2>,
      mpl::int_ <10>,
      mpl::int_ <5>,
      mpl::int_ <13>,
      mpl::int_ <-1>,
      mpl::int_ <13>,
      mpl::int_ <2>,
      mpl::int_ <5>,
      mpl::int_ <1>,
      mpl::int_ <11>
   > v_numbers;
   
   mpl::for_each <
      Concatenate <
         SortSeq <
            ChangeSeq <
               v_numbers
            >::v_start,
            mpl::less <mpl::_1, mpl::_2>
         >::sort_seq,
         SortSeq <
            ChangeSeq <
               v_numbers
            >::v_end,
            mpl::greater <mpl::_1, mpl::_2>
         >::sort_seq
      >::v_concat
   >(PrintSeq());    
}
http://liveworkspace.org/code/5c56a4...8a00cb067dbb39

Добавлено через 18 минут

Не по теме:

Как же я люблю boost..

 
Текущее время: 19:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru