C++ に導入された multiplies 等の四則演算子
2020-11-13


C/C++ でも、長らく四則演算は「+-*/」を使ってきた。その中でC++98 から multiplies を筆頭とする関数オブジェクトクラスが導入されている。

普段の利用では、四則演算子の方が見やすいし優れているが、テンプレートや関数ポインタ等として渡すことが出来ない。そんな場面で関数オブジェクトクラスが有用になる。

#include <functional>
#include <vector>
#include <iostream>
#include <algorithm>

int main()
{   
    std::cout << "4*7 = " << std::multiplies<>()( 4, 7 ) <&
lt; std::endl;

    std::vector< int > numbers = { 1, 2, 3, 4, -2, 5, 0, -1 };

    std::for_each( numbers.begin(), numbers.end(), []( int i )
        { std::cout << i << "*3 = " << std::multiplies< int
 >()( i, 3 ) << std::endl; } );

}
4 掛ける 7 の演算は見やすいように明示的に。行列の計算で、for_each のアルゴリズムとして。例としてラムダ関数を使っているので、コンパイルは C++14 で。
% c++ -std=c++14 multiplies.cpp
% ./a.out 
4*7 = 28
1*3 = 3
2*3 = 6
3*3 = 9
4*3 = 12
-2*3 = -6
5*3 = 15
0*3 = 0
-1*3 = -3
[C++]
[C++ STL]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット