我通过编程:原理和实践使用C ++(第2版)和我在向量部分教自己。我可以复制并粘贴他们的代码,但它仍然无法工作。我的代码如下。
#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
int main()
{
cout << "Please enter the temperatures for the last five days\n";
vector<double> temperatures;
for(double temp; cin >> temp;){
temperatures.push_back(temp);
}
double sum = 0;
for (double temp : temperatures){
sum += temp;
}
cout << "Mean temperature is " <<(sum / temperatures.size()) << endl;
sort(temperatures);
cout << "Median temperature is " << temperatures[temperatures.size()/2];
}
感谢帮助,解释更好。
答案 0 :(得分:7)
模板函数std::sort
期望一对迭代器作为其参数(即范围)和可选的比较器。没有sort
函数可以直接应用于容器。你在哪里得到了将其称为sort(temperatures)
的想法?要对整个temperatures
向量进行排序,应将其称为std::sort(temperatures.begin(), temperatures.end())
。我确信这本书有很多例子可以清楚地证明这一点。
此外,标准库标题通常应包含在#include <algorithm>
中,即使用<...>
语法,而不是"..."
语法。
答案 1 :(得分:6)
首先你应该纠正这个:
#include "iostream"
#include "vector"
#include "algorithm"
对此:
#include <iostream>
#include <vector>
#include <algorithm>
现在,std::sort
有两个版本如下:
void sort( RandomIt first, RandomIt last );
void sort( RandomIt first, RandomIt last, Compare comp );
第一个采用两个随机迭代器,例如:
std::vector<int> vec {5,4,3,2,1};
std::sort(vec.begin(), vec.end());
默认情况下,这会对升序中的元素进行排序。
sort的第二个版本有一个额外的参数,允许你使用自己的比较函数对元素进行排序,函数必须返回bool。
示例:
bool comp(const int &a, const int &b)
{
return a > b;
}
调用sort:std::sort(vec.begin(), vec.end(), comp);
会按降序对它们进行排序。
经常使用Lambda代替比较函数,可以这样做:
std::sort(vec.begin(), vec.end(), [](const int &a, const int &b) {return a < b;});
顺便说一下,获取“std_lib_facilities.h”:
#include "std_lib_facilities.h"
答案 2 :(得分:2)
首先,关于标题,书中的代码需要标题&#34; std_lib_facilities.h&#34;,可以在本书的支持网站上找到,并在项目中集成标题在本书的附录C中。
在代码中,他做了:
#include "std_lib_facilities.h"
这是项目中用户定义标题的正确方法,但通过这种方式包含标准库标题是完全错误的。必须使用#include <...>
表示法包含标准库标题。在他的书中,他从未使用#include "..."
符号包含标准库标题。
现在,关于排序(温度)的实际问题, 这个版本的sort()可以在他自己的标题中找到,&#34; std_lib_facilities.h&#34;使初学者很容易在不知道迭代器技术性的情况下使用sort()。
因此,要使用该版本的排序,#include "std_lib_facilities.h"
或使用其他版本的排序,其中一个是:
sort(temperatures.begin(), temperatures.end());