给定一个数字向量,如何将其连续的子向量折叠成一个较小的向量?当然,使用 STL 算法。
例如折叠向量 {1,2,3,4,5,6,7},子向量大小为 3,求和运算应该得到 {1+4+7,2+5,3+6}
这似乎可以解决问题。可以进一步模板化以支持除添加之外的操作。
#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;
}