2

私は行うテンプレート関数を見つけようとしています:

template <typename T>
T add(T lhs, T rhs) {
    return lhs + rhs;
}

(足し算、引き算、掛け算、割り算)。

これには標準的な関数セットがあったことを覚えています。それらが何であるか覚えていますか?

4

2 に答える 2

10

ヘッダーには、、、、、などがあり<functional>ます。std::plusstd::minusstd::multipliesstd::divides

それらも関数ではありません。それらは実際にはファンクターです。

于 2012-06-27T21:33:55.053 に答える
6

ヘッダーからstd::plusなどのファンクターが必要です。<functional>こちらの算術演算を参照し てください

これらは関数ではなくファンクターであるため、有用なことを行うにはインスタンスが必要です。

#include <functional>
#include <iostream>
int main() {

  std::multiplies<int> m;
  std::cout << m(5,3) << "\n";

}

これは上記のサンプルではやり過ぎのように見えますが、標準ライブラリ アルゴリズムでは非常に便利です。たとえば、ベクトル内の要素の積を見つけます。

std::vector<int> v{1,2,3,4,5,6};
int prod = std::accumulate(v.begin(), v.end(), 1, std::multiplies<int>());
于 2012-06-27T21:34:58.920 に答える