Rogue Wave バナー
前へマニュアルの先頭へ目次索引次へ

13.7 シーケンス生成アルゴリズム

この節で説明するアルゴリズムはすべて、ある種の変換を行うことによって、既存のシーケンスから新規シーケンスを生成するために使用されます。一般に、出力シーケンスは出力反復子によって定義されます。つまり、これらのアルゴリズムを使用して、vector などの既存の構造体を上書きすることができます。代わりに、挿入反復子 (2.4 節を参照) を使用して、このアルゴリズムは新規要素を setlist などの可変長構造体に挿入することができます。最後に、この節で取り上げる例では、出力反復子が入力反復子によって指定されたシーケンスと同一であることもあり、その場合はインプレース変換ができます。

関数 partial_sum() および adjacent_difference() は、ヘッダーファイル numeric で宣言されますが、その他の関数はヘッダーファイル algorithm で定義されます。


注 : 以降の節で説明する関数例は、alg6.cpp ファイルにあります。

13.7.1 1 つまたは 2 つのシーケンスの変換

アルゴリズム transform() を使用して、単一シーケンスの一般的な変換を行ったり、2 つの異なるシーケンスの対応する要素へ 2 項関数を対ごとに適用して、新規シーケンスを生成することができます。引数と結果の型の一般定義は次のとおりです。

最初の書式は、シーケンスの各要素に単項関数を適用します。以下に挙げるプログラム例では、 リンクした list に値の算術否定を適用する integer 値の vector を生成するためにこの書式が使用されています。入力および出力反復子が同一のこともありますが、この場合、プログラム例に示すように変換は同じ位置で適用されます。

第 2 の書式は、2 つのシーケンスを使用して、2 項関数を対ごとに対応する要素に適用します。このトランザクションは、第 2 のシーケンスが最初のシーケンスと同じかそれ以上の要素を含むことを想定していますが、確認はされません。結果は、第 3 のシーケンスとなるか、2 つの入力シーケンスのいずれかとなります。

13.7.2 部分和

シーケンスの部分和は、先行するすべての要素の値を加算することによって各要素が形成される新規シーケンスです。たとえば、ベクトル 1 3 2 4 5 の部分和は、新規ベクトル 1 4 6 10 15 となります。要素 4 は、和 1 + 3 から形成され、また、要素 6 は和 1 + 3 + 2 から形成されます (以下同様に続きます)。演算の説明にという用語が使用されていますが、この 2 項関数は任意の関数です。プログラム例では、これを部分積の計算を使用して説明します。

部分和関数の引数は、次のように定義されます。

入力反復子と結果に同じ値を使用することで、部分和をインプレース変換に変更することができます。

13.7.3 隣接差

シーケンスの隣接差とは、各要素を要素とその直前の要素の差で置換して形成される新規シーケンスです。新規シーケンスの最初の値は未変更のままです。たとえば、(1, 3, 2, 4, 5) のようなシーケンスは (1, 3-1, 2-3, 4-2, 5-4)に変換され、その結果シーケンス (1, 2, -1, 2, 1) となります。

アルゴリズム partial_sum() と同様に、という用語は任意の 2 項関数と置き換えられるので、必ずしも正確ではありません。たとえば、このシーケンスの隣接和は (1, 4, 5, 6, 9) となります。隣接差アルゴリズムは、次のように宣言されます。

入力および出力反復子に同一の反復子を使用すると、同じ位置で隣接差演算を実行することができます。


前へマニュアルの先頭へ目次索引次へ
Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月