向量:两行,需要解释

时间:2017-08-16 03:57:04

标签: c++ c++11

我在理解代码中的几行含义时遇到了一些麻烦。我最近开始学习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”表示取最后一个值。然而,当我试着在脑海中思考这个问题时,它与输出结合起来是没有意义的。是的,代码中的输出是正确的,但有人可以帮我解释一下这些内容吗?我只是不想只是复制和粘贴代码而不理解它。我需要帮助理解基本级别如何正确输出代码,以便我可以自己制定解决方案。谢谢!

2 个答案:

答案 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]