2017-11-29 11 views
1

私は最近、ベクター上で変換/機能を実行しなければならないときに、範囲アダプタをブーストで使用し始めました。以下は、レンジアダプタの使用を開始したときに私が見つけた最も単純な例のスニペットです。C++ブースト範囲アダプター複数のベクトル

int multiplyByTwo(int n) { return n*2; } 
std::vector<int> num = {1, 2, 3, 4, 5}; 
auto result = num | boost::adaptors::transformed(multiplyByTwo); 

私の関数が2つの引数を必要とする場合、2つのベクトルを範囲アダプタに渡す方法はありますか?例えば、このような状況で:

int multiplyBoth(int n1, int n2) {return n1*n2; } 
std::vector<int> num1 = {1, 2, 3, 4, 5}; 
std::vector<int> num2 = {1, 2, 3, 4, 5}; 

は、私はまだレンジアダプタを介して私の関数にnum1num2を両方のベクターパイプことができるのだろうか?おそらく、このような何か:

auto result = num1 | num2 | boost::adaptors::transformed(multiplyBoth); 
+0

'std :: transform'の使い方は? –

答えて

1

あなたはタプルの範囲に複数の範囲をオンにするcombineを使用することができます。

タプルを処理できるように関数を適合させる必要がありますが、ラムダがそれを行うことができます。

+1

OPsの目標を達成するために 'combine'とλを使う方法を示すために、この答えにコードサンプルを追加するとよいでしょう。 [私はここで作った](https://wandbox.org/permlink/Ol8WpGGSvn8sB6Qc)それを使いたいなら。 – AndyG

+0

感謝セバスチャン。私はboost :: combineを考えましたが、関数の入力引数をタプルに変更する必要があると考えていました。私は、関数アダプタを変更する必要はありませんので、誰かに私が範囲アダプタと一緒にタプルを使用するいくつかの例を示すことができれば素晴らしいでしょう。 – Zen

+0

ありがとうAndy!例を尋ねた後であなたのコメントを見ただけです!それはまさに私が望んでいたものです! – Zen

関連する問題