我是一个C++新手,但我试图采取一个向量与数量可变的元素降序排列,并找到每个元素之间的百分比下降。例如,如果我有{10 5 2.5 1 ],我如何输出一个向量,显示[50 50 40},显示百分比下降。先谢谢你了!
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;
roqulrg32#
在迭代循环中,你将有两个索引:
计算结果如下:
abs(vector[first number index] - vector[ second number index]) / abs(vector[first number index])
你应该把结果转换成另一个矢量。循环应该将索引递增1。另外,当第二个数字索引超过向量的大小时,您需要一个特殊情况。
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
3条答案
按热度按时间1aaf6o9v1#
你可以自己编写一个相应的循环,或者使用标准算法std::transform。举个例子
roqulrg32#
在迭代循环中,你将有两个索引:
计算结果如下:
你应该把结果转换成另一个矢量。
循环应该将索引递增1。
另外,当第二个数字索引超过向量的大小时,您需要一个特殊情况。
wlzqhblo3#
这是Vlad提到的循环方式:
这是它生成的输出: