我在理解代码中的几行含义时遇到了一些麻烦。我最近开始学习C ++,并选择了Bjarne Stroustrup的“Programming:Principles and Practice Using C ++”。第4章中有一个问题让我感到沮丧,所以我在网上搜索了一个解决方案。以下是我最终与本书一起使用的代码:
#include "std_lib_facilities.h"
int main()
{
vector<double> temps;
for (double temp; cin >> temp;)
temps.push_back(temp);
double sum = 0;
for (double x : temps) sum += x;
cout << "Average Temperature: " << sum / temps.size() << "\n";
if (temps.size() %2==0) {
sort(temps);
cout << "Median Temperature: " << (temps[temps.size() / 2 - 1] + temps[temps.size() / 2]) / 2 << "\n"; //line one
} else {
sort(temps);
cout << "Median Temperature: " << temps[temps.size() / 2] << "\n"; //line two
}
keep_window_open();
return 0;
}
我评论了我不理解的界限。这些载体究竟发生了什么?我理解“temps.size()”用于调用向量中的元素,通常“-1”表示取最后一个值。然而,当我试着在脑海中思考这个问题时,它与输出结合起来是没有意义的。是的,代码中的输出是正确的,但有人可以帮我解释一下这些内容吗?我只是不想只是复制和粘贴代码而不理解它。我需要帮助理解基本级别如何正确输出代码,以便我可以自己制定解决方案。谢谢!
答案 0 :(得分:1)
这就是数学:Median definition。因此,代码遵循定义。
我理解&#34; temps.size()&#34;用于调用向量中的元素,通常是&#34; -1&#34;意味着取最后一个值。然而,当我试着在脑海中思考这个问题时,它与输出结合起来并没有意义。
不,这里需要temps.size()/2 -1
,矢量的中间元素,而不是最后一个。
答案 1 :(得分:1)
数据集的中位数是一半数据高于中位数且一半数据低于中位数的值。如果存在奇数个数据点,则它是中间数据点的值。如果存在偶数个数据点,则它是两个中心数据点的算术平均值。
第1行之前的if语句检查是否存在偶数或奇数个数据点。如果比较为真,则存在偶数个数据点,因此您需要取temps[temps.size()/2-1]
(中位数下的最大值)和temps[temps.size()/2]
的平均值(即最小值超过中位数)。如果比较为假,则存在奇数个元素,因此中位数是中间元素temps[temps.size()/2]
。