std::is_partitioned
Материал из cppreference.com
![]() |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
Определено в заголовочном файле <algorithm>
|
||
template< class InputIt, class UnaryPredicate > bool is_partitioned( InputIt first, InputIt last, UnaryPredicate p ); |
(начиная с C++11) | |
Возврат true, если все элементы в диапазоне
[first, last)
, которые удовлетворяют предикату p
предстать перед всеми элементами, которые этого не делают. Также возвращает true если [first, last)
пусто.Оригинал:
Returns true if all elements in the range
[first, last)
that satisfy the predicate p
appear before all elements that don't. Also returns true if [first, last)
is empty.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Содержание |
[править] Параметры
first, last | - | диапазон элементов для проверки
Оригинал: the range of elements to check Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. |
p | - | унарный предикат, который возвращаетtrue для элементов, как ожидается, будет найден в начале диапазона . Оригинал: for the elements expected to be found in the beginning of the range Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. Определение функции предиката должны быть эквивалентно следующему: bool pred(const Type &a); Определение не должно иметь const &, но функция не должна модифицировать принимаемые объекты. |
Требования к типам | ||
-InputIt должен соответствовать требованиям InputIterator .
|
[править] Возвращаемое значение
true, если диапазон
[first, last)
пустой или разбивается p
. false иначе.Оригинал:
true if the range
[first, last)
is empty or is partitioned by p
. false otherwise.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Сложность
В большинстве
std::distance(first, last)
применения p
.Оригинал:
At most
std::distance(first, last)
applications of p
.Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Возможная реализация
template< class InputIt, class UnaryPredicate > bool is_partitioned(InputIt first, InputIt last, UnaryPredicate p) { for (; first != last; ++first) if (!p(*first)) break; for (; first != last; ++first) if (p(*first)) return false; return true; } |
[править] Пример
#include <algorithm> #include <array> #include <iostream> int main() { std::array<int, 9> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; auto is_even = [](int i){ return i % 2 == 0; }; std::cout.setf(std::ios_base::boolalpha); std::cout << std::is_partitioned(v.begin(), v.end(), is_even) << ' '; std::partition(v.begin(), v.end(), is_even); std::cout << std::is_partitioned(v.begin(), v.end(), is_even) << ' '; std::reverse(v.begin(), v.end()); std::cout << std::is_partitioned(v.begin(), v.end(), is_even); }
Вывод:
false true false
[править] См. также
делит диапазон элементов на две группы Оригинал: divides a range of elements into two groups Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (шаблон функции) | |
(C++11) |
locates the partition point of a partitioned range (шаблон функции) |