【发布时间】:2010-12-02 14:17:09
【问题描述】:
我在想如何在一个“简单”行中使用单个for_each 命令来反转vector 中包含的strings。
是的,我知道使用自定义函子很容易,但我不能接受,不能使用 bind 来完成(至少我做不到)。
#include <vector>
#include <string>
#include <algorithm>
std::vector<std::string> v;
v.push_back("abc");
v.push_back("12345");
std::for_each(v.begin(), v.end(), /*call std::reverse for each element*/);
编辑: 非常感谢那些有趣的解决方案。 但是,我的解决方案是不使用 Visual Studio 2008 功能包/SP1 附带的tr1::bind。我不知道为什么它不像预期的那样工作,但事实就是这样(even MS admits that it's buggy)。也许一些hotfixes 会有所帮助。
使用 boost::bind 一切都按预期工作,而且非常简单(但有时会很混乱:))。我真的应该首先尝试 boost::bind...
【问题讨论】:
-
“是的,我知道用扳手很容易做,但我不能接受不能用我的锤子做。”
-
@R.佩特:我发现知道如何在许多情况下使用我工具箱中的所有工具,即使其他工具会更好,这对于提高专业知识非常重要。我的宠物代码充满了这些东西。在生产代码中,我通常会尝试选择最好的(我知道,因为我已经对它们都进行了试验)。
-
我还想强调一下,使用 bind / lambdas 更清晰:所做工作的定义是本地的,这有助于人们阅读它......如果它不是太混乱的话。
-
这个问题确实有一个“算法”标签,因为它涵盖了 STL 算法的处理。 (再次添加标签)
-
添加了 stl 算法 :)
标签: c++ stl vector tr1 stl-algorithm