Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Memory issue when joining ranges in a for-loop

未关闭
#118 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
cpp
领域
tooling

调研方向

从提供的复现示例开始,阅读 boost/range/join.hpp,追踪重复 join 如何保留其输入。通过迭代示例中的范围来确认行为;当相同的扁平化用例能够完成,且进程未被 OOMKiller 终止时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

We are facing a memory issue (process is killed by the OOMKiller) when we join ranges inside a for loop. The idea here, is to flatten a list of ranges before returning the new range.

#include <vector>
#include <boost/range/any_range.hpp>
#include <boost/range/join.hpp>

struct A {
};

using Range = typename boost::any_range<A, boost::forward_traversal_tag, A&, std::ptrdiff_t>;

struct B {
    std::vector<A> v{10, A()};
};

struct C {
    std::vector<B> v{30, B()};

    Range getAll() const {
        Range all;
        for (const auto& b : v) {
            all = boost::range::join(all, b.v);
        }
        return all;
    }
}

int main(int argc, char** argv) {
    C c;
    for (const A& a : c.getAll()) {
        // Do something with a
    }
    
    return 0;
}
主要语言
C++
星标
45
派生
104
PR 合并指标
30 天内没有已合并 PR

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

boostorg/range 的其他 Issue

查看 boostorg/range 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。