【发布时间】:2011-01-08 01:24:33
【问题描述】:
我是一名编程学生,对于我正在从事的项目,我必须做的事情之一是计算 int 值向量的中值。我将仅使用 STL 中的排序函数和向量成员函数(例如 .begin()、.end() 和 .size())来执行此操作。
我还应该确保找到向量的中值是奇数还是偶数。
我卡住了,下面我已经包含了我的尝试。那么我哪里错了?如果您愿意给我一些指示或资源以朝着正确的方向前进,我将不胜感激。
代码:
int CalcMHWScore(const vector<int>& hWScores)
{
const int DIVISOR = 2;
double median;
sort(hWScores.begin(), hWScores.end());
if ((hWScores.size() % DIVISOR) == 0)
{
median = ((hWScores.begin() + hWScores.size()) + (hWScores.begin() + (hWScores.size() + 1))) / DIVISOR);
}
else
{
median = ((hWScores.begin() + hWScores.size()) / DIVISOR)
}
return median;
}
【问题讨论】:
-
我不确定在这里使用命名常量来表示“2”是否合适。
-
@Max - 谢谢你的收获,我给它加了标签。
-
您可能会收到一条多行长的错误消息,最终涉及“排序”行。那是因为您的函数的输入参数是
const并且sort正在尝试修改其内容。通过按值而不是通过 const 引用传递hWScores来更改它。 -
告诉你的老师 partial_sort 因为它可以用来在 O(n) 时间内找到中位数。不需要人们建议的任何这些奇数/偶数长度检查。
-
Darid,使用 partial_sort 仍然会在 O(n log n) 时间内运行,你仍然需要弄清楚中间使用哪个迭代器,你仍然需要对两者进行平均如果长度是偶数,则取中间值。