【码蹄集】数据流中位数(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函数。