7

別のイテレータをラップし、そのn番目の要素のみを提供するイテレータの標準実装(stdlibまたはboostを意味する)はありますか?

私は最初、これは適切な述語とboost :: filter_iteratorで可能だと思いましたが、述語は値のみを取得し、基本イテレーターは取得しないため、開始までの距離を知ることはできません。

編集
いくつかの詳細情報を提供するには:イテレータはまたはのような関数と互換性がある必要がありstd::transformますstd::copy。したがって、stdlibイテレータのように使用する必要があります。

同様の質問:
C ++ / STL:与えられたストライドでstd :: transform?
非ユニットイテレータは、非ランダムアクセスイテレータでストライドします

4

2 に答える 2

9

Boost.Rangeはストライドアダプターを提供します。boost::begin/を使用boost::endすると、関連するイテレータがネットになります。

于 2012-10-04T11:51:16.607 に答える
5

boost::filter_iterator次のような述語で使用できます。

 template< typename T, int N >
 struct EveryNth {
    bool operator()(const T&) { return m_count++ % N == 0; }
    EveryNth() : m_count(0) {}
    private:
      int m_count;
 };
于 2012-10-04T11:52:34.407 に答える