C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++ STLのnegate関数で値の符号を反転する方法

C++のSTL(標準テンプレートライブラリ)には、値の符号を簡単に反転できるnegate関数が用意されています。negateは「否定する」という意味を持つ関数オブジェクトで、正の値を負の値へ、負の値を正の値へと変換します。この記事では、std::transformと組み合わせてnegateを使う方法を解説します。

関数プロトタイプ

negateは通常、transformアルゴリズムと一緒に使われます。基本的な構文は以下の通りです。

function transform(a_begin, a_end, a1_begin, negate()):
   a_begin = 配列の先頭(下限)
   a_end = 配列の末尾(上限)
   a1_begin = 変換結果を格納する配列の先頭
   negate() = 配列内の各値の符号を反転する関数オブジェクト

サンプルコード

以下の例では、正と負が混在する整数配列に対してnegateを適用し、すべての要素の符号を反転させています。

#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;
int main() {
   int a[] = { 4,6,7, -10, -20, -30 };
   transform(a, a + 6, a, negate<int>());
   for (int i = 0; i < 6; i++)
      cout << a[i] << ' ';
   return 0;
}

実行結果

プログラムを実行すると、元の配列の各要素の符号が反転された結果が出力されます。

-4 -6 -7 10 20 30

コードのポイント

  • #include <functional>:negateを使用するために必要なヘッダーです。
  • #include <algorithm>transform関数を使用するために必要なヘッダーです。
  • transform(a, a + 6, a, negate<int>()):第1引数と第2引数で入力範囲を指定し、第3引数で出力先の先頭を指定します。ここでは同じ配列を指定しているため、元の配列が直接書き換えられます。

このように、negate関数オブジェクトを使えば、ループ処理を自分で書くことなく、わずか1行のコードで配列全体の符号を反転できます。簡潔で読みやすいコードを書きたい場合に非常に便利な機能です。

  1. C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説

    cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引

  2. C++ STLのsinh()関数の使い方を徹底解説

    sinh()関数とはsinh()関数は、ラジアンで指定された値の双曲線正弦(ハイパボリックサイン)を返す関数です。C++のSTL(標準テンプレートライブラリ)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。双曲線正弦は、以下の数式で定義されます。sinh(x) = (e^x − e^−x) / 2sinh()関数の構文sinh()関数の構文は以下のとおりです。sinh(var)構文からわかるように、sinh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。戻り値は、varの双曲線正弦です。sin