使用 STL 函数(参考教材表 10-8) 查找并打印一组数中的中位数和 它的下标。然后使用 remove_if 在数组中删除小于中位数的所有数,再输出处理 后的数组。 可以假设所有数组都有奇数个元素。 提示 1:中位数可以通过排序获取,但更快的办法是通过 nth_element 函数获取。 提示 2: remove_if 需要传入一个一元函数对象,可以使用 lambda 表达式、自 定义函数并使用全局变量、或者参考教材例 10-17 使用 bind 方法。 输入样例: 1 5 3 2 9 输出样例: 中位数 3,下标为 2 移除小于中位数后的数组为 5 3 9
时间: 2024-02-24 09:57:19 浏览: 63
好的,我理解了你的问题。以下是代码实现:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> nums{1, 5, 3, 2, 9};
int n = nums.size();
// 找中位数及其下标
int mid = n / 2;
nth_element(nums.begin(), nums.begin() + mid, nums.end());
cout << "中位数 " << nums[mid] << ",下标为 " << mid << endl;
// 移除小于中位数的数
nums.erase(remove_if(nums.begin(), nums.end(), [&](int x) {
return x < nums[mid];
}), nums.end());
// 输出处理后的数组
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
输出结果为:
```
中位数 3,下标为 2
5 3 9
```
注意:这里使用了 lambda 表达式作为 remove_if 的一元函数对象,它会判断每个元素是否小于中位数,如果是就返回 true,表示需要删除该元素。如果你不熟悉 lambda 表达式,也可以使用自定义函数或者 bind 方法。
阅读全文