我创建了一个名为Collect的方法,该方法将一堆值添加到向量中(如下所示)
void Median::Collect(double datum)
{
myVector.push_back(datum);
}
Run Code Online (Sandbox Code Playgroud)
我需要创建一种方法来计算我在上述方法中的向量中收集的所有值的中位数。函数定义如下
/* Calculates the median of the data (datum) from the Collect method.
*/
double Median::Calculate() const
{
}
Run Code Online (Sandbox Code Playgroud)
所以我知道我首先需要对向量进行排序才能找到中位数。以下是我的尝试:
double Median::Calculate() const
{
std::sort(myVector.begin(), myVector.end());
double median;
if (myVector.size() % 2 == 0)
{// even
median = (myVector[myVector.size() / 2 - 1] + myVector[myVector.size() / 2]) / 2;
}
else
{// odd
median = myVector[myVector.size() / 2];
}
return median;
}
Run Code Online (Sandbox Code Playgroud)
但是我意识到这不是编译的,因为方法是const,所以对向量的值进行排序会改变向量,这在const函数中是不允许的。那么我应该为这种方法做什么?