c++ - 如何使用带有参数/修改的 std::foreach

标签 c++ stl loops enumeration

我发现自己在写作

for(int i=0;i<myvec.size();i++)
   myvec[i]->DoWhatever(param);

很多,我想将它压缩成一个 foreach 语句,但我不知道如何在其中获取 param 而不会过于冗长.我也有类似的东西

for(int i=0;i<myvec.size();i++)
   if(myvec[i]->IsOK())
      myvec[i]->DoWhatever(param);

我也想重写那个人。有什么想法吗?

哦,还有,由于种种原因,我不想用boost。

最佳答案

#include <vector>
#include <algorithm>
#include <functional>

class X
{
    public:
        void doWhat(int x) {}
        bool IsOK() const {return true;}
};
class CallWhatIfOk
{
    public:
        CallWhatIfOk(int p): param(p) {}

        void operator()(X& x) const
        {   if (x.IsOK())    {x.doWhat(param);}}
    private:
        int param;
};

int main()
{
    std::vector<X>      myVec;

    std::for_each(  myVec.begin(),
                    myVec.end(),
                    std::bind2nd(std::mem_fun_ref(&X::doWhat),4)
                 );


    std::for_each(  myVec.begin(),
                    myVec.end(),
                    CallWhatIfOk(4)
                 );
}

关于c++ - 如何使用带有参数/修改的 std::foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/476488/

相关文章:

java - 使用用户输入的数字退出循环

c++ - 指向更大 unsigned char 数组的每个第 n 个元素的指针数组

c++ - 指向std::any元组的C++ 17指针数组

c++ - OpenMP 2 中的共享 vector

c++ - 在 C++ 中遍历一个常量元组列表

python - 我怎样才能让这两个线程一个接一个地不断运行python?

javascript - 如果 URL 包含此字符串,则隐藏具有此类/id 的所有 div(循环脚本)

c++ - 在构造函数中实例化对象时的C++类成员作用域

c++ - CComPtr 的 ".Release()"和 "->Release()"之间的区别?

c++ - 是否可以将 STL multimap value_type 函数与多参数 C++ 构造函数一起使用