0
私は以下のタスクを与えられています:実数の与えられた二重リンクリストでは、リストの反対の要素を乗算する必要があります、最後のマイナス1など)、この製品を新しいリストに追加します。 すなわち:我々はそのリストを持っている:C++の二重リンクリストの反対の要素のペアごとの乗算
1.1 2.2 3.3 4.4 5.5
その後、我々は
1.1 * 5.5 = 6.05;
2.2 * 4.4 = 9.68;
3.3 * 3.3 = 10.89;
を印刷し、最終的なリストは、次のとおりです。
:私は、次のナイーブアルゴリズムを作ってみた6.05 9.68 10.89
#include <iostream>
#include <list>
using namespace std;
int main() {
double x = 0;
double q = 0; //for the product of the elements
list <double> user_values, calculated_products;
//data entry
while (cin >> x) {
user_values.push_back(x);
if (cin.get() == '\n') break;
}
//pairwise multiplication of the opposite elements (х1 * хn; x2 * xn-1; etc.):
for (auto p = user_values.begin(); p!=(user_values.end()); ++p){
cout << (*p) << " * " << (*user_values.rbegin()) << " = " ;
q = (*p) * (*user_values.rbegin()); //result of the multiplication
cout << q << "; " << endl;
calculated_products.push_back(q); //saving result to the new list
user_values.pop_back(); //removing the last element of the list, in order to iterate backwards. This is probably the most confusing part.
}
//result output:
cout << "we have such list of products: " << endl;
for (const auto& t: calculated_products){
cout << t << " ";
}
cout << endl;
return 0;
}
リストの要素を逆順に反復することは問題であり、リストの最後の要素を削除するオプションしか見つけられませんでした。
誰かがこれを行うためのより洗練されたアルゴリズムを思いついたのか、それとも上記のものを少なくとも改良することができるのだろうかと思います。
質問は[SEコードレビュー](https://codereview.stackexchange.com/)に行く必要があります。 – user0042
@JTejedor彼はリストを変更しています。したがって、 'rbegin()'は、次の繰り返しで正しい要素を指しています。なぜなら、目的の要素が最後になっているからです。 – Zinki