1、is_partitioned()
一个序列中如果满足某一条件的元素全都都在前面、不满足该条件的元素全部在后面则is_partitioned()返回true,否则返回false。
#define debug qDebug()<<
int main(int argc, char *argv[])
{
QList<int> list = {8, 9, 1, 2, 3, 4, 5, 6};
bool result;
result = std::is_partitioned(list.begin(), list.end(), [](const int & value)
{
return value > 7;
});
debug result;
}
这里条件是值大于7,大于7的8、9在序列前面,不大于的都在后面。返回true。
把9移到1前面,大于7的数全部在前面就不成立了,返回false。
2、partition_copy()
partition_copy()将序列中满足和不满足条件的元素分别复制到两个序列
#define debug qDebug()<<
int main(int argc, char *argv[])
{
QList<int> list = {8, 1, 9, 2, 3, 4, 5, 6};
QList<int> list2,list3;
auto result = std::partition_copy(list.begin(), list.end(),
std::back_inserter(list2),std::back_inserter(list3),
[](const int & value)
{
return value > 7;
});
debug list2;
debug list3;
}
满足大于7的元素和不满足大于7的元素分别被复制到一个序列。
3、partition_point()
返回满足条件的第一个子序列的end迭代器
#define debug qDebug()<<
int main(int argc, char *argv[])
{
QList<int> list = {1, 8, 12, 2, 3, 4, 9,66, 5, 6};
auto result = std::partition_point(list.begin(), list.end(), [](const int & value)
{
return value > 7;
});
if(result != list.end())
{
debug *result;
}
}
这个序列含有两个满足大于7的子序列,返回第一个子序列的end迭代器。
4、stable_partition()
将满足条件的元素放到前面,不满足条件的元素放到后面
#define debug qDebug()<<
int main(int argc, char *argv[])
{
QList<int> list = {1, 8, 12, 2, 3, 4, 9,66, 5, 6};
std::stable_partition(list.begin(), list.end(), [](const int & value)
{
return value > 7;
});
debug list;
}
stable_partition()会保证输出序列在原来序列的相对顺序。
5、partition()
和stable_partition()类似,但不会保证结果序列在原来序列的相对顺序
#define debug qDebug()<<
int main(int argc, char *argv[])
{
QList<int> list = {1, 8, 12, 2, 3, 4, 9,66, 5, 6};
auto result = std::partition(list.begin(), list.end(), [](const int & value)
{
return value > 7;
});
debug list;
debug *result;
}
partition()返回满足条件子序列的end迭代器。