【问题标题】:What is the usefulness of project1st<Arg1, Arg2> in the STL?STL中project1st<Arg1, Arg2>有什么用处?
【发布时间】:2010-09-25 15:37:49
【问题描述】:

我在浏览 SGI STL 文档时遇到了project1st&lt;Arg1, Arg2&gt;。我理解它的定义,但我很难想象它的实际用途。

您曾经使用过 project1st,或者您能想象一个场景吗?

【问题讨论】:

    标签: c++ stl functional-programming


    【解决方案1】:

    project1st 的一个变体(获取std::pair,并返回.first)非常有用。您可以将它与std::transform 结合使用,将密钥从std::map&lt;K,V&gt; 复制到std::vector&lt;K&gt;。同样,project2nd 的变体可用于将值从映射复制到 vector&lt;V&gt;

    事实上,没有一个标准算法真正受益于 project1st。最接近的是 partial_sum(project1st),它将所有输出元素设置为第一个输入元素。它的存在主要是因为 STL 在很大程度上建立在数学集合论之上,而像 project1st 这样的操作是基本的构建块。

    【讨论】:

      【解决方案2】:

      我的猜测是,如果您正在使用策略模式并且遇到需要传递标识对象的情况,那么这将是一个不错的选择。例如,一个算法可能需要几个这样的对象,而您可能希望其中一个在某些情况下什么都不做。

      【讨论】:

      • 相当:它与传递 0 作为 std::copy_n 的大小参数的目的大致相同。它使用户不必在整个代码中传播特殊情况。他们可以只在一个地方指定一个识别函子,然后像对待任何其他函子一样对待它。
      【解决方案3】:

      并行编程。想象一下这样一种情况,两个进程针对给定的计算得出两个有效但不同的结果,您需要强制它们相同。 project1st/2nd 提供了一种非常方便的方法来对整个容器执行此操作,使用适当的并行调用,该调用将仿函数作为参数。

      【讨论】:

        【解决方案4】:

        我假设 某人 对它有实际用途,或者它不会被写出来,但我在它可能是什么上画了一个空白。大概它的用例类似于描述中提到的identity 函数,其中没有真正需要处理但语法无论如何都需要一个仿函数。

        同一页面上的示例建议将其与std::transform 的双容器形式一起使用,但如果我没记错的话,他们使用它的方式在功能上与std::copy 相同,所以我不这样做'没看明白。

        对我来说,这看起来像是寻找问题的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-29
          • 1970-01-01
          • 2011-09-12
          • 1970-01-01
          • 2013-05-01
          相关资源
          最近更新 更多