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

Finding difference of values in vector in c++

本文关键字:查找 c++ 向量      更新时间:2023-10-16

我必须编写一个程序,读取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;
}

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

你是说吗

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

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

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 ...
}