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

Next_permutation - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шестнадцатеричный вывод WORD и DWORD в поток без приведения к указателю http://www.cyberforum.ru/cpp-beginners/thread610774.html
Как сделать? Есть ли для этого потоковый манипулятор? Желательно, чтоб цифры A-F были в верхнем регистре и выводились старшие не значащие ноли, то есть, например, не 0xfe, а 0x00FE, или 0x000000FE.
C++ Неправильный код Друзья в чём ошибка кода? Задание такое: нужно запрограммировать связный список, в котором объект добавляется в конец, а удаляется с начала списка. #include "stdafx.h" #include <iostream>... http://www.cyberforum.ru/cpp-beginners/thread610753.html
C++ Блок-схема по двум кодам
Никак не могу разобраться как построить блок схемы для данных двух кодов.Пожалуйсто,помогите.... Первый код int main() { FILE * pFile=0; long lSize; char * buffer=0; size_t result; pFile =...
За сколько можно выучить C++ на достаточном уровне? C++
Привет всем форумчанам, я начал учить C++ и у меня вопрос назрел, а за сколько можно выучить этот язык на достаточном уровне? Моя цель это к октябрю суметь написать антивирус (ну для тренировки, 5...
C++ В группе студентов определи средний балл каждого за последнюю сессию, распечатать Ф.И.О. студентов со средним баллом не меньше 4, остальных рассор http://www.cyberforum.ru/cpp-beginners/thread610670.html
Пожалуйста помогите с программой ,очень необходима! С обязательным применением функций, исходные данные или результат или и то и другое должно размещаться в текстовом файле.
C++ Разработать программу содержащую 2 потока с подсчетом периметров фигур Здраствуйте! помогите пожалуйста с решением задачки: Разработать программу, содержащую 2 треда (потока). 1 тред считает периметр вписанной фигуры. 2 тред - описанной фигуры. Каждый потом, на каждом... подробнее

Показать сообщение отдельно
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
21.06.2012, 12:30
http://cplusplus.com/reference/algorithm/next_permutation/
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
// next_permutation and prev_permutation, with and without an explicitly
  // supplied comparison function.
 
  /**
   *  @brief  Permute range into the next "dictionary" ordering.
   *  @param  first  Start of range.
   *  @param  last   End of range.
   *  @return  False if wrapped to first permutation, true otherwise.
   *
   *  Treats all permutations of the range as a set of "dictionary" sorted
   *  sequences.  Permutes the current sequence into the next one of this set.
   *  Returns true if there are more sequences to generate.  If the sequence
   *  is the largest of the set, the smallest is generated and false returned.
  */
  template<typename _BidirectionalIterator>
    bool
    next_permutation(_BidirectionalIterator __first,
             _BidirectionalIterator __last)
    {
      // concept requirements
      __glibcxx_function_requires(_BidirectionalIteratorConcept<
                  _BidirectionalIterator>)
      __glibcxx_function_requires(_LessThanComparableConcept<
        typename iterator_traits<_BidirectionalIterator>::value_type>)
      __glibcxx_requires_valid_range(__first, __last);
 
      if (__first == __last)
    return false;
      _BidirectionalIterator __i = __first;
      ++__i;
      if (__i == __last)
    return false;
      __i = __last;
      --__i;
 
      for(;;)
    {
      _BidirectionalIterator __ii = __i;
      --__i;
      if (*__i < *__ii)
        {
          _BidirectionalIterator __j = __last;
          while (!(*__i < *--__j))
        {}
          std::iter_swap(__i, __j);
          std::reverse(__ii, __last);
          return true;
        }
      if (__i == __first)
        {
          std::reverse(__first, __last);
          return false;
        }
    }
    }
 
  /**
   *  @brief  Permute range into the next "dictionary" ordering using
   *  comparison functor.
   *  @param  first  Start of range.
   *  @param  last   End of range.
   *  @param  comp
   *  @return  False if wrapped to first permutation, true otherwise.
   *
   *  Treats all permutations of the range [first,last) as a set of
   *  "dictionary" sorted sequences ordered by @a comp.  Permutes the current
   *  sequence into the next one of this set.  Returns true if there are more
   *  sequences to generate.  If the sequence is the largest of the set, the
   *  smallest is generated and false returned.
  */
  template<typename _BidirectionalIterator, typename _Compare>
    bool
    next_permutation(_BidirectionalIterator __first,
             _BidirectionalIterator __last, _Compare __comp)
    {
      // concept requirements
      __glibcxx_function_requires(_BidirectionalIteratorConcept<
                  _BidirectionalIterator>)
      __glibcxx_function_requires(_BinaryPredicateConcept<_Compare,
        typename iterator_traits<_BidirectionalIterator>::value_type,
        typename iterator_traits<_BidirectionalIterator>::value_type>)
      __glibcxx_requires_valid_range(__first, __last);
 
      if (__first == __last)
    return false;
      _BidirectionalIterator __i = __first;
      ++__i;
      if (__i == __last)
    return false;
      __i = __last;
      --__i;
 
      for(;;)
    {
      _BidirectionalIterator __ii = __i;
      --__i;
      if (__comp(*__i, *__ii))
        {
          _BidirectionalIterator __j = __last;
          while (!__comp(*__i, *--__j))
        {}
          std::iter_swap(__i, __j);
          std::reverse(__ii, __last);
          return true;
        }
      if (__i == __first)
        {
          std::reverse(__first, __last);
          return false;
        }
    }
    }
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru