2014-04-15 5 views
0

Мне нужно написать программу, которая читает по 15 ценам и сохраняет их в последовательном контейнере, а затем сортирует их в порядке возрастания. Затем программа должна найти и отобразить: торговый диапазон (самые низкие и самые высокие цены) .. и последовательность, которая показывает, насколько цена повышалась и падала каждый день. У меня возникли проблемы с созданием последовательности, чтобы показать, сколько цены выросли и упали. Я пытаюсь использовать adjacent_difference, но при запуске я получаю ошибки «Ошибка сегментации». Любая помощь будет высоко оцененНайти разницу значений в векторе в C++

#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; 
} 
+2

Что такое ошибка компиляции? – GriffinG

ответ

0

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

  • adjacent_difference требует выходного итератора в качестве третьего параметра.
  • это возвращает итератор

Таким образом, вы будете желающими сделать что-то вроде:

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

И тогда диф будет заполнен с той разницей, и ИТЭР будет итератором где начинаются различия.

По звукам вы захотите повторить все различия, чтобы каждый день показывать изменение цены. Таким образом, вы будете хотеть, чтобы положить, что в цикле:

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

ITYM 'back_inserter (dif)' –

+0

благодаря матовой, фиксированной. – qeadz

0

Проблема заключается в том, что не существует operator<< функция не может вставить возвращаемое значение adjacent_differenc в std::cout.

вы имели в виду

cout<<"The differences in price: " << *adjacent_difference(prices.begin(),prices.end(),dif.begin())<<endl; 
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
Смежные вопросы