【问题标题】:C++ standard/de facto STL algorithm wrappersC++ 标准/事实上的 STL 算法包装器
【发布时间】:2011-01-11 21:07:57
【问题描述】:

是否有围绕标准算法的标准/事实上的标准(增强)包装器,可与定义开始和结束的容器一起使用。让我告诉你我对代码的意思:

// instead of specifying begin and end
std::copy(vector.begin(), vector.end(), output);
// write as
xxx::copy(vector, output);

我知道它可以很容易地编写,但我正在寻找一些无处不在的东西。 谢谢。

【问题讨论】:

  • 确实是一个很好的问题。我一直觉得基于迭代器的算法的想法很混乱...std::copy(input.begin(), input.end(), std::back_inserter(output)); 这真的伤害了我的眼睛...不幸的是,每当涉及到实际修改底层容器的结构(添加/删除)元素时,然后Boost.Range 不起作用:/

标签: c++ algorithm boost containers wrapper


【解决方案1】:

我将添加我自己的发现:Adobe 源库(来自 boost 的 rangex 取代算法部分) ASL

【讨论】:

    【解决方案2】:

    Boost Range 库有一个扩展名为 RangeEx,其中包含所有 stl 算法的范围包装器,以及一些新算法。

    它最近已被 Boost 接受,因此尚未出现在当前的“官方”版本 (1.41) 中。在此更改之前,您可以从 Boost Vault 中download the latest version

    不知道这是否会成为 C++ 标准的一部分,但它在 Boost 中的事实意味着它将成为事实上的标准。

    【讨论】:

    • fyi,RangeEx 自 1.43.0 起已集成到 Boost Range
    【解决方案3】:

    下一个标准将(希望!)修改这一点。同时,看看Boost.Range 及其各种用途,虽然我不知道标准算法的接口。

    【讨论】:

    • TR1 不包括范围工具。 C++0x 的 Wikipedia 页面列出了一些关于范围语义的项目,但它们指的是 C++0x 中新增的基于范围的 for 循环。 AFAIK 标准算法没有在新标准中被修改——尽管我可能是错的......
    • @unknown:不,TR1 严格来说并不是一个新标准,它只是一堆建议。我说的是 C++0x(尽管 Wikipedia 文章中确实缺少该内容 - 但它计划的。不确定它是否进入最终草案)。
    • 这是 Stroustrup 的“概念”提案的一部分,它不在 C++0x 中。库更改本来会很棒,但这必须与作为语言功能的概念的复杂性相平衡。
    • @Jason:嗯,可惜。但实际上并不需要概念,因为范围只是两个迭代器的持有者,所以我不明白为什么它与概念一起被删除。
    【解决方案4】:

    我见过这样的唯一情况是那些基于boost::range库的算法,但即使这些算法实际上也没有修改像std::copystd::remove_if这样的标准算法——有问题的算法需要编写以利用这种范围包装器。

    例如,请参阅Boost String Algorithms 库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多