粘在什么是UVa 10107的中位数

时间:2015-09-07 01:02:20

标签: c++ c++11 vector runtime-error median

我坚持这个uva问题我认为我的算法是正确的但是程序在运行时崩溃了,我无法弄清楚问题出在哪里但是我认为它与迭代器有关?请帮忙!!!

代码:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
    int n, R, L;

    long long idx, aver;
    std::vector<long long> v;
    std::vector<long long>::iterator it;

    while(cin >> n)
    {
        it=v.begin();
        v.push_back(n);
        std::sort(v.begin(), v.end());

        if(v.size() == 1)
        {
            std::cout << *it << std::endl;
        }
        else if(v.size() % 2 == 0)
        {
            L=v.size() / 2 - 1;
            R=v.size() / 2;

            aver = (*(it + L) + *(it + R)) / 2;

            std::cout<< aver << std::endl;
        }
        else
        {
            idx = v.size() / 2;
            aver = *(it + idx);

            std::cout << aver << std::endl;
        }
    }

    return 0;
}

Problem link

Ideone link

1 个答案:

答案 0 :(得分:1)

我得到了它我终于被接受了,问题在于迭代器,它指向v.begin()当向量在循环的第一次迭代时为空时所以程序崩溃了。在完成第一个push_back()之后,我让迭代器指向向量的开头,在这种情况下向量不为空。

正确的代码:

using namespace std;

Ideone link