我是 C++ 的新手,但我试图以降序获取具有可变数量元素的向量,并找到每个元素之间的百分比下降。
例如,如果我有 {10 5 2.5 1 ],我如何输出一个显示 [50 50 40} 的向量,显示百分比下降。
提前致谢!
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;
这是弗拉德提到的循环方式:
#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
在您的迭代循环中,您将有两个索引:
数学看起来像:
abs(vector[first number index] - vector[ second number index])
/ abs(vector[first number index])
你应该将结果转换成另一个向量。
循环应该将索引增加 1。
此外,当第二个数字索引超出向量的大小时,您需要一个特殊情况。