在c ++中查找向量中值的差异

时间:2014-04-15 23:42:05

标签: c++

我必须编写一个程序,读取15个价格并将它们存储在顺序容器中,然后按顺序对它们进行排序。然后程序应该找到并显示:交易范围(最低和最高价格)..以及显示价格每天上涨和下跌多少的序列。 我在创建序列时遇到问题,以显示价格上涨和下跌的程度。我正在尝试使用adjacent_difference,但在运行时遇到“Segmentation fault”错误。任何帮助将不胜感激

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

using namespace std;

int main(void)
{
 int i;
 int s=15;
 int p;
 vector <int> prices;
 vector <int> dif;

  cout<<"Please enter the trading price: ";
  while(prices.size()<s && cin>>p)
    prices.push_back(p);
  cout<<"The differences in price: "<<adjacent_difference(prices.begin(),prices.end(),dif.begin())<<endl;
  sort(prices.begin(),prices.end());
  cout<<"The smallest number is "<<*min_element(prices.begin(),prices.end())<<endl;
  cout<<"The latgest number is "<<*max_element(prices.begin(),prices.end())<<endl;


return 0;
}

3 个答案:

答案 0 :(得分:0)

http://www.cplusplus.com/reference/numeric/adjacent_difference/

  • adjacent_difference需要输出迭代器作为其第三个参数。
  • 返回迭代器

所以你会想做类似的事情:

auto dif_iter = adjacent_difference(prices.begin(),prices.end(),back_inserter(dif));

然后dif将填充差异,iter将成为差异开始的迭代器。

通过它的声音,您将想要迭代所有差异以显示每天的价格变化。所以你会想把它放在一个循环中:

for( auto iter = dif_iter; iter != dif.end(); ++iter )
{
  cout << ... some information with *iter ...
}

答案 1 :(得分:0)

问题是没有operator<<函数可以将adjacent_differenc的返回值插入std::cout

你的意思是

cout<<"The differences in price: " << *adjacent_difference(prices.begin(),prices.end(),dif.begin())<<endl;

答案 2 :(得分:0)

std::adjacent_difference需要OutputIterator作为其第三个参数:

adjacent_difference( prices.begin(), prices.end(), back_inserter(dif) );

您需要#include <iterator>

返回相同的OutputIterator。您不能使用OutputIterator来检索值。相反,您要做的是打印dif中的所有条目:

cout << "The differences in price: ";
for (int x : dif)
    cout << x << " ";
cout << endl;

继续前进,min_elementmax_element函数会遍历向量以查找这些元素。对矢量进行排序也是多余的。您应该执行以下两个选项之一:

  • sort()然后输出第一个和最后一个元素
  • 请勿排序,并使用*min_element*max_element