矢量子串超出范围

时间:2015-02-21 00:33:18

标签: c++ vector

我正在解决一个问题,现在我已经被错误地困了大约3个小时了。因此,我已经放弃了努力,我正在寻找互联网,看看别人的丰富知识是否有助于解决我的问题。

程序的一个jist,它从任意数量的命令行输入。它将它们插入到矢量中,然后对数据集执行一系列统计分析。

目前,我在五分位数功能方面遇到了困难(正如我的老师所说,或者对于那些在维基百科上查找它的人来说是“分位数”)。

逻辑上,我的代码应该可行。但是,它似乎在我创建的向量的实际结束之前达到超出范围的错误2。

继承函数后跟内部调用的函数:

string quintile(vector<double> v) {
    ostringstream oss;
    oss << "Quintile means" << endl;
    vector<unsigned> quintile{ 0 };

    // get range of quintiles and insert into vector
    for (unsigned i = 1; i <= 5; ++i)
        quintile.push_back((v.size() * 0.2) * i);

    // get the mean for each quintile
    for (unsigned i = 0; i < 5; ++i)
        oss << "Q" << (i + 1) << ": " << mean_sized(v, quintile[i], quintile[i + 1]) << "  (" << quintile[i] << ".." << quintile[i + 1] << ")" << endl;

return oss.str();
}

double mean_sized(vector<double> v, int first, int last) {
    double mean = 0.0;
    vector<double> sub;
    for (unsigned i = v[first]; i < v[last]; ++i)
        sub.push_back(v[i]);

    return (accumulate(sub.begin(), sub.end(), mean) / sub.size());
}

任何输入都非常受欢迎,因为我非常难过。我将继续学习最后一项功能,希望在我完成这项工作的时候,有人会让我知道解决这个问题。< / p>

谢谢!

1 个答案:

答案 0 :(得分:2)

这个循环错了:

for (unsigned i = v[first]; i < v[last]; ++i)
    sub.push_back(v[i]);

您正在使用向量中的值作为索引范围。您应该使用firstlast的范围:

for (unsigned i = first; i <= last; i++) {
    sub.push_back(v[i]);
}

P.S。见Why is it considered a bad practice to omit curly braces?