c++ - 如何折叠STL vector 的子 vector ?

标签 c++ algorithm stl vector

给定一个数值 vector ,我如何将其连续的子 vector 折叠成一个更小的 vector ?当然是使用 STL 算法。

例如折叠子 vector 大小为 3 的 vector {1,2,3,4,5,6,7} 和求和运算应该给出 {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;
}

关于c++ - 如何折叠STL vector 的子 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541243/

相关文章:

java - 在扑克中赋予手牌力量的算法

c++ - 如果 stack.top() 返回一个引用,那么为什么这段代码不起作用?

c++ - 通过引用传递给 STL 容器的对象的生命周期

c++ - Cholesky 分解 ScaLapack 错误

c++ - Boost StateCharts 与 Samek 的 "Quantum Statecharts"的比较

algorithm - 在熟人列表中查找姓名的复杂性如何

c++ - 有一个只有文件名(a、f/a、f/b、f/f/c 等)的 std::set 如何通过给定的 f/列出目录?

c++ - 在 VBA 中模仿 std::map<string, std::list<string>>

c++ - 在构造函数中引用此指针

JavaScript 搜索算法