std::partition_copy
![]() |
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 OutputIt1, class OutputIt2, class UnaryPredicate > |
(начиная с C++11) | |
p
из серии [first, last)
в диапазоне начиная с d_first_true
, и копирует элементы, которые не удовлетворяют p
в диапазоне начиная с d_first_false
.p
from the range [first, last)
to the range beginning at d_first_true
, and copies the elements that do not satisfy p
to the range beginning at d_first_false
.Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Содержание |
[править] Параметры
first, last | - | диапазон элементов для сортировки
Оригинал: the range of elements to sort Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. |
d_first_true | - | Начало выходной диапазон для элементов, которые удовлетворяют р
Оригинал: the beginning of the output range for the elements that satisfy p Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. |
d_first_false | - | Начало выходной диапазон для элементов, которые не удовлетворяют р
Оригинал: the beginning of the output range for the elements that do not satisfy p Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. |
p | - | унарный предикат, который возвращаетtrue если элемент должен быть помещен в d_first_true . Оригинал: if the element should be placed in d_first_true Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. Определение функции предиката должны быть эквивалентно следующему: bool pred(const Type &a); Определение не должно иметь const &, но функция не должна модифицировать принимаемые объекты. |
Требования к типам | ||
-InputIt должен соответствовать требованиям InputIterator .
| ||
-OutputIt1 должен соответствовать требованиям OutputIterator .
| ||
-OutputIt2 должен соответствовать требованиям OutputIterator .
|
[править] Возвращаемое значение
d_first_true
и итератор к концу d_first_false
диапазон.d_first_true
range and the iterator to the end of the d_first_false
range.Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Сложность
distance(first, last)
применения p
.distance(first, last)
applications of p
.Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
[править] Возможная реализация
template<class InputIt, class OutputIt1, class OutputIt2, class UnaryPredicate> std::pair<OutputIt1, OutputIt2> partition_copy(InputIt first, InputIt last, OutputIt1 d_first_true, OutputIt2 d_first_false, UnaryPredicate p) { while (first != last) { if (p(*first)) { *d_first_true = *first; ++d_first_true; } else { *d_first_false = *first; ++d_first_false; } ++first; } return std::pair<OutputIt1, OutputIt2>(d_first_true, d_first_false); } |
[править] Пример
#include <iostream> #include <algorithm> #include <utility> int main() { int arr [10] = {1,2,3,4,5,6,7,8,9,10}; int true_arr [5] = {0}; int false_arr [5] = {0}; std::partition_copy(std::begin(arr), std::end(arr), std::begin(true_arr),std::begin(false_arr), [] (int i) {return i > 5;}); std::cout << "true_arr: "; for (auto it = std::begin(true_arr); it != std::end(true_arr); ++it) { std::cout << *it << ' '; } std::cout << '\n'; std::cout << "false_arr: "; for (auto it = std::begin(false_arr); it != std::end(false_arr); ++it) { std::cout << *it << ' '; } std::cout << '\n'; return 0; }
Вывод:
true_arr: 6 7 8 9 10 false_arr: 1 2 3 4 5
[править] См. также
делит диапазон элементов на две группы Оригинал: divides a range of elements into two groups Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (шаблон функции) | |
разделяет элементы на две группы, сохраняя их относительный порядок Оригинал: divides elements into two groups while preserving their relative order Текст был переведён автоматически через Google Translate. Вы можете проверить и исправить перевод. Для инструкций кликните сюда. (шаблон функции) |