1

我是 C++ 的新手,但我试图以降序获取具有可变数量元素的向量,并找到每个元素之间的百分比下降。

例如,如果我有 {10 5 2.5 1 ],我如何输出一个显示 [50 50 40} 的向量,显示百分比下降。

提前致谢!

4

3 回答 3

4

Either you should write a corresponding loop yourself or you can use standard algorithm std::transform. For example

    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;
于 2013-11-11T18:56:49.800 回答
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 
于 2013-11-11T21:03:17.090 回答
0

在您的迭代循环中,您将有两个索引:

  • 第一个数字索引
  • 第二个数字索引

数学看起来像:

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

你应该将结果转换成另一个向量。

循环应该将索引增加 1。

此外,当第二个数字索引超出向量的大小时,您需要一个特殊情况。

于 2013-11-11T20:53:16.563 回答