vector<int>
彼のすべての要素を実行し、選択した特定の演算子に従ってそれらを「合計」する関数を作成したいと思います。
たとえば、v1 = [3,6,7]
この関数で計算できます - 3+6+7
of 3-6-7
of 3*6*7
etc ..
このために私は -
#include <iostream>
#include <vector>
using namespace std;
#define OPERATOR(X,Y,OP) X #OP Y
template<T>
int allVectorWithOperator(vector<int> &myVector, T) {
vector<int>::iterator it;
vector<int>::iterator oneBeforeFinal;
oneBeforeFinal = myVector.end();
oneBeforeFinal -= 2;
int sum = 0;
for (it = myVector.begin(); it <= oneBeforeFinal; it++) {
sum = OPERATOR(*(it),*(it+1),T);
}
return sum;
}
int main() {
vector<int> myVector;
myVector.push_back(3);
myVector.push_back(6);
myVector.push_back(7);
cout << "run over all the vector with * is :" << allVectorWithOperator(myVector,*)<<endl;
// here I want to get 3*6*7
}
このようなテンプレートの場合はうまく制御できないため、このコードが機能しないことがわかりますが、私の目標が何であるかを理解していると思います。どうすれば正常に動作するように修正できますか?
編集:
私が得た2つの答えによると、コードセクションを-に変更しました
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
template<typename T>
int allVectorWhitOperator(vector<int> &myVector, const T& func) {
int sum = std::accumulate(myVector.begin(), myVector.end(), 1, func);
return sum;
}
int main() {
vector<int> myVector;
myVector.push_back(3);
myVector.push_back(4);
myVector.push_back(6);
cout << "accumulate the vector with * is :"
<< allVectorWhitOperator(myVector, std::multiplies<int>()) << endl;
}
そして、それはうまくいきます!確かに私はgot accumulate the vector with * is :72