📅  最后修改于: 2023-12-03 15:13:55.319000             🧑  作者: Mango
在C++中,STL algorithm库提供了许多强大的函数来帮助我们处理各种类型的数据。其中之一就是nth_element()
函数。这个函数可以让我们查找一个数组中第k
大(小)的元素。
以下是nth_element()
函数的函数定义,它定义在
template< class RandomIt >
void nth_element( RandomIt first, RandomIt nth, RandomIt last );
first
:指向容器第一个元素的迭代器nth
:指向第n大(小)的迭代器last
:指向容器最后一个元素的迭代器nth_element()
函数会在[first,last)范围内重新排列元素,使第nth
个元素前面的元素都小于它,后面的元素都大于它。这个函数不会对剩余的元素进行排序,也就是说对于任意i < j
,first[i]
和first[j]
的相对位置不会发生改变。
接下来我们来看一个实例。假设我们有一个数组arr
,我们要查找第4大的元素。我们可以将nth_element()
函数应用于这个数组,如下所示。
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int len = sizeof(arr)/sizeof(int);
nth_element(arr, arr+3, arr+len);
cout << "第四大的元素是:" << arr[3] << endl;
return 0;
}
以上代码输出:
第四大的元素是:4
nth_element()
函数是一个非常有用的功能,可以用于各种不同的场景。当你需要快速查找一个容器中第n
大(小)的元素时,这个函数就派上用场了。它可以将数组的元素重新排列,同时保持它们原来的相对位置,效率很高,值得你去尝试。