私は C++ の初心者ですが、可変量の要素を持つベクトルを降順で取り、各要素間のパーセンテージ ドロップを見つけようとしています。
たとえば、{10 5 2.5 1 ] の場合、ドロップ率を示す [50 50 40} を示すベクトルを出力するにはどうすればよいでしょうか。
前もって感謝します!
対応するループを自分で作成するか、標準アルゴリズム 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;
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