あなたは簡単にevery_n
述語を作成し、あなたが得ることができるように、一般的なようだなどcopy_if、のために必要に応じてそれをフィルタリングするために使用することができます。
おおよそ(注:まだのような未検査)「毎にn個の要素」述語の例:
/**
@brief Un predicado que retorna @c true cada @a n invocaciones.
**/
template <typename Integer>
struct every_n {
static_assert (std::numeric_limits<Integer>::is_integer, "Must behave like an integer");
public:
explicit every_n (Integer const& e)
: n(e), x(1) {}
every_n (every_n const& E)
: n(E.n), x(E.x) {}
bool operator() (...) {
if (x<n) { ++x; return false; }
else { x=Integer(1); return true; }
}
private:
Integer x;
const Integer n;
};
// "make_" idiom
template <typename Integer>
every_n<Integer> every (Integer const& c) { return every_n<Integer>(c); }
// sample usage
# include required headers, etc
using namespace std;
const int a_size = 6, b_size = 3;
int a[a_size] = {1, 3, 6, 3, 2, 7};
int b[b_size];
copy_if (begin(a), end(a), begin(b), every(3));
すべてのコードが必要でevery()
が整数のように動作タイプと呼ばれることがあります。
(このコードでは、C++ 11であるstatic_assert、begin()、end()、copy_if()を使用していますが、適切な関数をバックポートすればC++ 03でも同様に機能します)
: 'のために(int型AX = 0; AX + = 2; AX
vdenotaris
あなたの例では、bの奇数要素は初期化されていない値であることに注意してください。 – kfsone
これらはありません(コピーは 'bx 'によって追跡されます)。しかし、 'b_size'がステップ(この例では2)に対して誤った値を与えられると、出力配列に初期化されていない値があります。 –