我很难掌握应该如何使用std::nth_element
,因为我有点生疏了。
裁判说:
重新排列 range
[first,last)
中的元素,使得第 n 个位置的元素是排序序列中该位置的元素。
我想获取向量子集的第 n 个元素,所以我想这样做:
std::nth_element (v.begin()+start-0, v.begin()+nTh-1, v.begin()+end);
将意味着v
从start
,直到end
(不包括)向量 的子集,然后假设该子集已排序,定位nTh
元素。
看来我的理解是错误的,因为这个玩具示例:
#include <iostream>
#include <algorithm>
#include <vector>
int main () {
std::vector<int> myvector;
// set some values:
for (int i=1; i<10; i++) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9
std::random_shuffle (myvector.begin(), myvector.end());
std::nth_element (myvector.begin() + 1 - 0, myvector.begin()+5-1, myvector.begin() + 5);
std::cout << *(myvector.begin()+5-1) << std::endl;
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
打印 9 作为请求的元素,而我期待 5。请问我错过了什么?