【码蹄集】数据流中位数(vector,sort)


//该程序中,首先读入接收数据的次数n,然后根据n的值循环接收数据,如果操作符为“+”,
//则将读入的数字添加到vector末尾;
//如果操作符为“?”,则对vector进行排序,然后计算中位数,
//如果vector长度为偶数,则取中间两个数的平均值。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> nums; // 存储数据的列表
string op; // 操作符
int num; // 待添加的数字
int n; // 接收数据的次数
cin >> n;
while (n--) { // 根据用户输入的次数循环接收数据
cin >> op;
if (op == "+") { // 如果是添加操作
cin >> num;
nums.push_back(num); // 添加到列表末尾
} else if (op == "?") { // 如果是查询中位数操作
int size = nums.size();
sort(nums.begin(),nums.end());
if (size % 2 == 0) { // 如果列表长度是偶数
int mid1 = nums[size/2-1];
int mid2 = nums[size/2];
float temp;
temp = mid1+mid2;
cout << temp / 2 << endl;
} else { // 如果列表长度是奇数
cout << nums[size/2] << endl;
}
}
}
return 0;
}
Avoid:
在使用std::sort函数对std::vector进行排序时,需要使用nums.begin()和nums.end()作为std::sort函数的参数,这些参数指定了要排序的向量的起始位置和结束位置。此外,std::sort函数默认按升序排序,如果需要按降序排序,则需要使用std::greater函数对象作为第三个参数传递给std::sort函数。