2

数値ベクトルが与えられた場合、その連続するサブベクトルを単一のより小さなベクトルに折りたたむにはどうすればよいですか?もちろん、STLアルゴリズムを使用します。

たとえば、サブベクトルサイズが3のベクトル{1,2,3,4,5,6,7}を折りたたむと、合計演算により{1 + 4 + 7,2 + 5,3+6}が得られます。

4

1 に答える 1

1

これでうまくいくようです。追加以外の操作をサポートするために、さらにテンプレート化できます。

#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

template <typename T>
std::vector<T> foldSubVectors(const std::vector<T>& v, unsigned int foldSize)
{
    std::vector<T> result (foldSize, 0);

    unsigned int i = 0;
    for (i = 0; i + foldSize <= v.size(); i += foldSize)
        std::transform(result.begin(), result.end(), v.begin() + i,
                       result.begin(), std::plus<T>());
    if (i < v.size())
        std::transform(result.begin(), result.begin() + (v.size() - i),
                       result.begin() + i, result.begin(), std::plus<T>());

    return result;
}
于 2012-11-24T14:17:21.473 に答える