C++ 算法 partition_point() 函數用於返回給定範圍內 pred 不為真的第一個元素。元素的排序方式是滿足條件的元素排在不滿足的元素之前。
用法
template <class ForwardIterator, class UnaryPredicate>
ForwardIterator partition_point (ForwardIterator first, ForwardIterator last,
UnaryPredicate pred);
參數
first: 指向範圍內第一個元素的前向迭代器以檢查條件。
last:指向範圍過去最後一個元素的前向迭代器。
pred:用戶定義的一元謂詞函數,用於定義要測試的條件。
返回值
此函數返回一個前向迭代器,指向第一個不滿足 pred 測試條件的元素,如果未找到則返回最後一個。
複雜度
複雜性在 [first, last) 範圍內是對數的。
數據競爭
範圍 [first, last) 中的一些對象被訪問。
異常
如果元素的比較或迭代器上的操作引發異常,則此函數將引發異常。
注意:無效的參數會導致未定義的行為。
例子1
讓我們看一個簡單的例子來演示 partition_point() 的使用:
#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
using namespace std;
int main()
{
array<int, 9> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto is_even = [](int i)
{ return i % 2 == 0; };
partition(v.begin(), v.end(), is_even);
auto p = std::partition_point(v.begin(), v.end(), is_even);
cout << "Before partition:\n ";
copy(v.begin(), p, ostream_iterator<int>(cout, " "));
cout << "\nAfter partition:\n ";
copy(p, v.end(), ostream_iterator<int>(cout, " "));
return 0;
}
輸出:
Before partition: 8 2 6 4 After partition: 5 3 7 1 9
例子2
讓我們看另一個簡單的例子:
#include <iostream> // std::cout
#include <algorithm> // std::partition, std::partition_point
#include <vector> // std::vector
using namespace std;
bool IsOdd (int i) { return (i%2)==1; }
int main () {
vector<int> foo {1,2,3,4,5,6,7,8,9};
vector<int> odd;
partition (foo.begin(),foo.end(),IsOdd);
auto it = partition_point(foo.begin(),foo.end(),IsOdd);
odd.assign (foo.begin(),it);
// print contents of odd:
cout << "odd:";
for (int& x:odd) cout << ' ' << x;
cout << '\n';
return 0;
}
輸出:
odd:1 9 3 7 5
例子3
讓我們看另一個簡單的例子:
#include<iostream>
#include<algorithm> // for partition algorithm
#include<vector> // for vector
using namespace std;
int main()
{
// Initializing vector
vector<int> vect = { 2, 1, 5, 6, 8, 7 };
// partitioning vector using stable_partition()
// in sorted order
stable_partition(vect.begin(), vect.end(), [](int x)
{
return x%2 == 0;
});
// Displaying partitioned Vector
cout << "The partitioned vector is:";
for (int &x:vect) cout << x << " ";
cout << endl;
// Declaring iterator
vector<int>::iterator it1;
// using partition_point() to get ending position of partition
auto it = partition_point(vect.begin(), vect.end(), [](int x)
{
return x%2==0;
});
// Displaying partitioned Vector
cout << "The vector elements returning true for condition are:";
for ( it1= vect.begin(); it1!=it; it1++)
cout << *it1 << " ";
cout << endl;
return 0;
}
輸出:
The partitioned vector is:2 6 8 1 5 7 The vector elements returning true for condition are:2 6 8
示例 4
讓我們看另一個簡單的例子:
#include <iostream> // std::cout
#include <algorithm> // std::partition, std::partition_point
#include <vector> // std::vector
using namespace std;
bool IsNegative(int i) { return (i < 0); }
int main()
{
vector<int> data{ 1, -1, 3, -4, 5, 2, -2, 4, -5, -3 };
vector<int> negative, positive;
// partition data on the basis of odd elements using
// pred IsNegative()
stable_partition(data.begin(), data.end(), IsNegative);
// gets the partition point based on odd elements
auto it = partition_point(data.begin(), data.end(), IsNegative);
// assign elements to odd from beginning till
// partition point.
negative.assign(data.begin(), it);
positive.assign(it, data.end());
// print contents of odd:
cout << "Negative:";
for (int& x:negative)
cout << ' ' << x;
cout << '\n';
// print contents of even:
cout << "Positive:";
for (int& x:positive)
cout << ' ' << x;
cout << '\n';
return 0;
}
輸出:
Negative: -1 -4 -2 -5 -3 Positive: 1 3 5 2 4
相關用法
- C++ Algorithm partition_copy()用法及代碼示例
- C++ Algorithm partition()用法及代碼示例
- C++ Algorithm partial_sort()用法及代碼示例
- C++ Algorithm partial_sort_copy()用法及代碼示例
- C++ Algorithm pop_heap()用法及代碼示例
- C++ Algorithm prev_permutation()用法及代碼示例
- C++ Algorithm remove_if()用法及代碼示例
- C++ Algorithm remove()用法及代碼示例
- C++ Algorithm max_element()用法及代碼示例
- C++ Algorithm set_union()用法及代碼示例
- C++ Algorithm next_permutation()用法及代碼示例
- C++ Algorithm upper_bound()用法及代碼示例
- C++ Algorithm minmax()用法及代碼示例
- C++ Algorithm remove_copy_if()用法及代碼示例
- C++ Algorithm random_shuffle()用法及代碼示例
- C++ Algorithm replace()用法及代碼示例
- C++ Algorithm set_intersection()用法及代碼示例
- C++ Algorithm lower_bound()用法及代碼示例
- C++ Algorithm transform()用法及代碼示例
- C++ Algorithm set_difference()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ Algorithm partition_point()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。