我必须编写一个程序,读取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;
}
答案 0 :(得分:0)
http://www.cplusplus.com/reference/numeric/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_element
和max_element
函数会遍历向量以查找这些元素。对矢量进行排序也是多余的。您应该执行以下两个选项之一:
sort()
然后输出第一个和最后一个元素*min_element
和*max_element