我正在嘗試撰寫一個程式,該程式回傳一個串列,其第 n 個元素是傳輸串列的前 n 個值的總和。
list<int> summe(list<int> liste) {
list<int> neueListe;
list<int>::iterator itr;
itr = liste.begin();
int sum = 0;
int n = 0;
cout << "Liste mit Summen: " << endl;
cout << "{ " << endl;
for (itr = liste.begin(); itr != liste.end(); itr ) {
sum = accumulate(liste.begin(), itr, 0);
neueListe.push_back(sum);
cout << sum << endl;
n ;
}
cout << " }";
return neueListe;
}
int main() {
//Aufgabe 2.2 Teil 2
list<int> l = { 1,2,3,4,5 };
Algo a;
a.summe(l);
}
輸出是:0,1,3,6,10 我認為問題是,第一個回圈是accumulate(liste.begin(), liste.begin(), 0); 應該始終為 0。但是我不知道如何獲取第一個元素(盡管它只是一個元素,因此無需累積)。我想要以下輸出:1、3、6、10、15。
uj5u.com熱心網友回復:
您使用了錯誤的演算法。對于此任務std::partial_sum,標題中已存在宣告的適當演算法<numeric>。
這是一個演示程式。
#include <iostream>
#include <list>
#include <iterator>
#include <numeric>
std::list<int> summe( const std::list<int> &liste )
{
std::list<int> neueListe;
std::partial_sum( std::begin( liste ), std::end( liste ),
std::back_inserter( neueListe ) );
return neueListe;
}
int main()
{
std::list<int> l = { 1, 2, 3, 4, 5 };
auto l2 = summe( l );
for ( const auto &item : l2 )
{
std::cout << item << ' ';
}
std::cout << '\n';
return 0;
}
程式輸出是
1 3 6 10 15
或者您可以在您的函式中傳輸演算法的實作。為此目的,有一個回圈就足夠了。
uj5u.com熱心網友回復:
輸出是:0,1,3,6,10 我認為問題是,第一個回圈是accumulate(liste.begin(), liste.begin(), 0); 應該始終為 0。但是我不知道如何獲取第一個元素(盡管它只是一個元素,因此無需累積)。我想要以下輸出:1、3、6、10、15。
您已經知道該函式已經存在,<numeric>因此您不必撰寫它。但無論如何我都會回答這個具體問題,以便您可以更廣泛地從中學習。
原始片段
for (itr = liste.begin(); itr != liste.end(); itr ) {
sum = accumulate(liste.begin(), itr, 0);
neueListe.push_back(sum);
cout << sum << endl;
n ;
}
改寫
int sum {0};
for (const auto x : liste) { // use ranged for loop !!!!!
sum = x;
neueListe.push_back(sum);
}
各種cout陳述句是為了幫助您了解正在發生的事情,不屬于最終代碼。相反,您可以單獨列印串列(或執行任何您需要的操作)。
該值n似乎沒有任何意義,因為它增加了但從未在任何地方提及。
uj5u.com熱心網友回復:
我的summe()函式實作在回圈中使用一個整數值來迭代liste,我將1unit 和 insideaccumulate方法的值添加到它的長度,我用作引數begin(liste)iterator 和下一次迭代next(begin(liste), i)。
list<int> summe(list<int> liste) {
list<int> neueListe;
list<int>::iterator itr;
itr = liste.begin();
int sum = 0;
int n = 0;
cout << "Liste mit Summen: " << endl;
cout << "{ " ;
for (int i=1; i < liste.size() 1; i ) {
sum = accumulate(begin(liste), next(begin(liste), i), 0);
neueListe.push_back(sum);
cout << sum << " ";
n ;
}
cout << " }";
return neueListe;
}
輸出:
1 3 6 10 15
添加二元運算子
如果要乘以值,則需要創建一個函式以用作呼叫的附加引數accumulate():
int mult_op(int x, int y) {return x*y;}
// use 1 otherwise return a list filled with 0's
accumulate(begin(liste), next(begin(liste), i), 1, mult_op);
1 2 6 24 120
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/360834.html
上一篇:如何僅在串列串列中找到某些值的總和,并且僅當某個字串在其中時?
下一篇:修復不匹配的矩陣
