求向量C++中变量之间的百分比差异

2skhul33  于 2023-05-24  发布在  其他
关注(0)|答案(3)|浏览(231)

我是一个C++新手,但我试图采取一个向量与数量可变的元素降序排列,并找到每个元素之间的百分比下降。
例如,如果我有{10 5 2.5 1 ],我如何输出一个向量,显示[50 50 40},显示百分比下降。
先谢谢你了!

1aaf6o9v

1aaf6o9v1#

你可以自己编写一个相应的循环,或者使用标准算法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;
roqulrg3

roqulrg32#

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

  • 第一编号索引
  • 第二指数

计算结果如下:

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

你应该把结果转换成另一个矢量。
循环应该将索引递增1。
另外,当第二个数字索引超过向量的大小时,您需要一个特殊情况。

wlzqhblo

wlzqhblo3#

这是Vlad提到的循环方式:

#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

相关问题