相邻区别使用什么语法?

时间:2015-04-19 01:50:50

标签: c++

我正在编写一个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;

}

以下是错误:

  • 28:47:错误:无法调用'(std :: vector)(std :: vector :: iterator&amp;)' adjacent_difference(p.begin(),p.end(),p(it1));
  • 31:81:错误:没有匹配函数来调用'adjacent_difference(std :: vector :: iterator&amp;)'  cout&lt;&lt;“每日交易价格的差异是:”&lt;

有人可以解释所涉及的语法吗? 谢谢!

3 个答案:

答案 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 LookupDetailed explanation

您必须知道可以存在完全匹配(参数类型完全匹配),但这不是必需的。编译器有时可以足够聪明地将其转换为所需的类型。

我猜第一个错误是因为编译器无法将迭代器强制转换为正确的类型。

但是,例如虚拟方法可能会更棘手。