【发布时间】:2010-09-25 15:37:49
【问题描述】:
我在浏览 SGI STL 文档时遇到了project1st<Arg1, Arg2>。我理解它的定义,但我很难想象它的实际用途。
您曾经使用过 project1st,或者您能想象一个场景吗?
【问题讨论】:
标签: c++ stl functional-programming
我在浏览 SGI STL 文档时遇到了project1st<Arg1, Arg2>。我理解它的定义,但我很难想象它的实际用途。
您曾经使用过 project1st,或者您能想象一个场景吗?
【问题讨论】:
标签: c++ stl functional-programming
project1st 的一个变体(获取std::pair,并返回.first)非常有用。您可以将它与std::transform 结合使用,将密钥从std::map<K,V> 复制到std::vector<K>。同样,project2nd 的变体可用于将值从映射复制到 vector<V>。
事实上,没有一个标准算法真正受益于 project1st。最接近的是 partial_sum(project1st),它将所有输出元素设置为第一个输入元素。它的存在主要是因为 STL 在很大程度上建立在数学集合论之上,而像 project1st 这样的操作是基本的构建块。
【讨论】:
我的猜测是,如果您正在使用策略模式并且遇到需要传递标识对象的情况,那么这将是一个不错的选择。例如,一个算法可能需要几个这样的对象,而您可能希望其中一个在某些情况下什么都不做。
【讨论】:
并行编程。想象一下这样一种情况,两个进程针对给定的计算得出两个有效但不同的结果,您需要强制它们相同。 project1st/2nd 提供了一种非常方便的方法来对整个容器执行此操作,使用适当的并行调用,该调用将仿函数作为参数。
【讨论】:
我假设 某人 对它有实际用途,或者它不会被写出来,但我在它可能是什么上画了一个空白。大概它的用例类似于描述中提到的identity 函数,其中没有真正需要处理但语法无论如何都需要一个仿函数。
同一页面上的示例建议将其与std::transform 的双容器形式一起使用,但如果我没记错的话,他们使用它的方式在功能上与std::copy 相同,所以我不这样做'没看明白。
对我来说,这看起来像是寻找问题的解决方案。
【讨论】: