2013-11-11 6 views
1

Я новичок в C++, но я пытаюсь взять вектор с переменным количеством элементов в порядке убывания и найти процентное падение между каждым элементом.Найти процентное различие между переменными в векторе C++

Например, если у меня есть {10 5 2.5 1], как я могу вывести вектор, показывающий [50 50 40}, показывающий процентное падение.

Заранее благодарен!

+1

Что вы пробовали, и где вы застряли? У вас возникают проблемы с арифметикой, чтобы вычислить процент, цикл для итерации по вектору или что-то еще? –

+0

iterator adj_difference (начало итератора, конец итератора, результат итератора, двоичная функция f); – user2672165

+0

Итак, я рисую числа из векторного «вывода» и помещаю проценты в вектор «percentDiff». Вектор «output» изменяет размер на основе пользовательского ввода. Я не уверен, как сделать арифметику для каждого последовательного элемента. std :: vector percentDiff; int numlength = output.size; для (int i = 0; i GCODE

ответ

4

Либо вы должны написать соответствующий цикл самостоятельно, либо вы можете использовать стандартный алгоритм std :: transform. Например

std::vector<double> v = { 10, 5, 2.5, 1 }; 

    std::transform(std::next(v.begin()), v.end(), v.begin(), std::ostream_iterator<double>(std::cout, " "), 
     [](double x, double y) { return (x * 100/y); }); 
    std::cout << std::endl; 
0

в цикле перебора, вы будете иметь два индекса:

  • индекс второго индекс первого номер
  • номер

Математик будет выглядеть следующим образом:

abs(vector[first number index] - vector[ second number index]) 
    /abs(vector[first number index]) 

Вы должен быть результатом в другой вектор.

Петля должна увеличивать показатели на 1.

Кроме того, вам понадобится особый случай, когда второй номер индекса выходит за пределы размера вектора.

0

вот путь петли Влад отметил:

#include <iostream> 
#include <vector> 

int main() { 
    double val; 
    std::vector<double> values, percentages; 

    while(std::cin >> val) {  //get values from user 
     values.push_back(val);  //on linux, terminate with CTRL+D 
    } 
    for(unsigned i = 0; i < values.size() - 1; ++i) {  //calculate percentage differences 
     percentages.push_back((values[i+1]/values[i]) * 100); //and populate percentage vector 
    } 
    for(auto it : percentages) { //print percentage vector 
     std::cout << it << " "; 
    } 
    std::cout << std::endl; 
} 

и вот выход он генерирует:

10 
5 
2.5 
1 
50 50 40 
Смежные вопросы