我正在编写一个C ++程序来确定最低和最高的交易价格,并通过查询用户15个交易价格来确定这些价格之间的差异,通过使用相邻差异来计算差异,打印出差异,计算通过使用排序记录的最低和最高价格,并打印出这些价值。
我熟悉sort的使用,但我不熟悉adjacent_difference。我多次阅读我的教科书,在互联网上搜索并尝试多次修改我的代码,但我仍然遇到错误而且我迷路了。
这是我的代码:
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
int main (void)
{
vector <int> p (15);
vector <int>::iterator it1;
cout<<"This program determines the daily differences, lowest and highest of 15 user-entered trading prices."<<endl;
for (int i=0; i<p.size(); i++)
{
cout<<"Please enter a trading price."<<endl;
cin>>p[i];
}
adjacent_difference(p.begin(), p.end(), p(it1));
for (int i=0; i<p.size(); i++)
{
cout<<"The difference in daily trading prices is: "<<adjacent_difference(it1)<<endl;
}
sort (p.begin(), p.end());
cout<<endl;
cout<<"The lowest trading price recorded was "<<p[0]<<"."<<endl;
cout<<"The highest trading price recorded was "<<p[14]<<"."<<endl;
return 0;
}
以下是错误:
有人可以解释所涉及的语法吗? 谢谢!
答案 0 :(得分:1)
您对adjacent_difference
的来电不正确。试试这个:
vector <int> p (15);
vector <int> result(15);
for (int i=0; i < p.size(); ++i) {
cout << "Please enter a trading price." << endl;
cin >> p[i];
}
adjacent_difference(p.begin(), p.end(), result.begin());
for (vector<int>::const_iterator i = result.begin(); i != result.end(); ++i) {
cout << *i << ' ';
}
答案 1 :(得分:1)
adjacent_difference
的参数都是迭代器。您正确提供的前两个:它们是输入范围的开头和结尾。
第三个参数是输出迭代器,您可以在其中放置结果。例如:
#include <vector>
#include <numeric>
// Just some arbitrary inputs:
std::vector<int> inputs { 1, 2, 17, 15, 4, 19, 0, 2};
std::vector<int> results;
std::adjacent_difference(inputs.begin(), inputs.end(),
std::back_inserter(results));
如果您打算打印结果,可以直接通过为第三个参数指定ostream_iterator来实现:
std::adjacent_difference(inputs.begin(), inputs.end(),
std::ostream_iterator<int>(std::cout, "\t"));
但请注意,从std::adjacent_difference
获得的第一个值是第一个输入值。每个后续结果都与前一个结果不同。
另请注意,您不需要完全对输入进行排序,只是为了找到最高和最低价格。最明显的方法是使用`std :: minmax_element,类似这样:
auto hilo = std::minmax_element(inputs.begin(), inputs.end());
std::cout << "Lowest price: " << *hilo.first << "\n"
<< "highest price: " << *hilo.second << "\n";
答案 2 :(得分:0)
我想你定义(或导入)了一个函数&#34; adjacent_difference&#34;。但是,编译器无法解决这两个过程调用:
adjacent_difference(p.begin(), p.end(), p(it1));
adjacent_difference(it1)
所以基本上,根据参数,程序无法(明确地)决定为调用选择哪个构造函数。原因可能是参数的数量不匹配,或者参数本身不匹配(类型不同)。
C ++使用&#34; Koenig Lookup&#34;检查程序是否与呼叫匹配。 我强烈建议您查看以下内容:Koenig Lookup,Detailed explanation
您必须知道可以存在完全匹配(参数类型完全匹配),但这不是必需的。编译器有时可以足够聪明地将其转换为所需的类型。
我猜第一个错误是因为编译器无法将迭代器强制转换为正确的类型。
但是,例如虚拟方法可能会更棘手。