我正在解决一个问题,现在我已经被错误地困了大约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>
谢谢!
答案 0 :(得分:2)
这个循环错了:
for (unsigned i = v[first]; i < v[last]; ++i)
sub.push_back(v[i]);
您正在使用向量中的值作为索引范围。您应该使用first
到last
的范围:
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?