6
範囲の範囲を範囲の範囲にスライスして、隣接する範囲が境界要素を共有するように範囲-V3ライブラリを使用しようとしました。範囲を重複範囲の範囲に分割
以下を考慮してください
using namespace ranges;
std::vector<int> v = { 1, 2, 3, 0, 4, 0, 5, 0, 6, 7, 8, 0, 0, 9 };
auto myRanges = v | /* something like adjacent split */
for_each(myRanges, [](auto&& range){ std::cout << range << std::endl;});
I領域は、2つの基準をfullfillsかどう基づく重複部分範囲に範囲を分割したい:
- 要素がゼロ
- の値を有するかどうかをまたは0の値を有する1つまたは複数の要素に隣接しています。
所望の出力:
[1,2,3]
[3,0,4,0,5,0,6]
[6,7,8]
[8,0,0,9]
私の試み:
auto degenerate =
[](auto&& arg){
return distance(arg) < 2;
};
auto myRanges = v | view::split(0) | view::remove_if(degenerate);
for_each(myRanges, [](auto&& range){ std::cout << range << std::endl;});
出力:
[1,2,3]
[6,7,8]
私は
- "挿入" かもしれない方法で途方に暮れてよ3〜6の範囲。
- 私が正しくあなたの要件を理解していれば、あなたは
adjacent_find
の面で発電機を実装することができ、8〜9
なぜ移動参照を渡していますか?それはあなたのデータを壊すでしょう – Sugar
@Sugar私は 'auto &&'の使用と、 '&&'がrvalue参照を暗示しているという印象を想定しています。この場合、そのsigilはrvalue参照を意味するのではなく、Scott Meyerのものが普遍的に参照するものを意味します。もっと見る(こちら)[https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers] – apmccartney
[ここ](https://isocpp.org/blog/2012/11)/universal-references-in-c11-scott-meyers)は、apmccartneyのリンクの作業バージョンです。 –