std::partition
|
|
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. |
| Defined in header <algorithm>
|
||
| template< class BidirIt, class UnaryPredicate > BidirectionalIterator partition( BidirIt first, BidirIt last, |
(C + + 11時まで) (C + + 11以来) |
|
[first, last)の要素、そのすべての要素どちらの述語p戻りtrue要素に先行するための述語p戻りfalse。要素の相対的な順序は保持されません. [first, last) in such a way that all elements for which the predicate p returns true precede the elements for which predicate p returns false. Relative order of the elements is not preserved. You can help to correct and verify the translation. Click here for instructions.
目次 |
[編集] パラメータ
| first, last | - | 順序を変更する要素の範囲
Original: the range of elements to reorder The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. | |||||||||
| p | - | unary predicate which returns true 要素は他の要素の前に発注する必要があります . Original: if the element should be ordered before other elements The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. The signature of the predicate function should be equivalent to the following:
The signature does not need to have const &, but the function must not modify the objects passed to it. | |||||||||
| Type requirements | |||||||||||
-BidirIt must meet the requirements of BidirectionalIterator.
| |||||||||||
-ForwardIt must meet the requirements of ValueSwappable and ForwardIterator. However, the operation is more efficient if ForwardIt also satisfies the requirements of BidirectionalIterator
| |||||||||||
[編集] 値を返します
You can help to correct and verify the translation. Click here for instructions.
[編集] 複雑
ForwardItが最もBidirectionalIteratorスワップで(last-first)/2の要件を満たしている場合に行われ.ForwardIt meets the requirements of BidirectionalIterator at most (last-first)/2 swaps are done.You can help to correct and verify the translation. Click here for instructions.
[編集] 可能な実装
template<class BidirIt, class UnaryPredicate> BidirIt partition(BidirIt first, BidirIt last, UnaryPredicate p) { while (1) { while ((first != last) && p(*first)) { ++first; } if (first == last--) break; while ((first != last) && !p(*last)) { --last; } if (first == last) break; std::swap(*first++, *last); } return first; } |
[編集] 例
#include <algorithm> #include <functional> #include <iostream> #include <iterator> #include <vector> bool is_even(int i) { return i % 2 == 0; } int main() { std::vector<int> v; for (int i = 0; i < 10; ++i) v.push_back(i); std::cout << "Original vector:\n "; std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); // Partition the vector std::vector<int>::iterator p = std::partition(v.begin(), v.end(), std::ptr_fun(is_even)); std::cout << "\nPartitioned vector:\n "; std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " ")); std::cout << "\nBefore partition:\n "; std::copy(v.begin(), p, std::ostream_iterator<int>(std::cout, " ")); std::cout << "\nAfter partition:\n "; std::copy(p, v.end(), std::ostream_iterator<int>(std::cout, " ")); }
Possible output:
Original vector:
0 1 2 3 4 5 6 7 8 9
Partitioned vector:
0 8 2 6 4 5 3 7 1 9
Before partition:
0 8 2 6 4
After partition:
5 3 7 1 9[編集] も参照してください
| (C++11) |
範囲が指定された述語によって仕切られているかどうかを判断します Original: determines if the range is partitioned by the given predicate The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (関数テンプレート) |
| それらの相対的な順序を維持しながら、二つのグループに要素を分割します Original: divides elements into two groups while preserving their relative order The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (関数テンプレート) | |