2015-04-26 37 views
1

我需要使用Boost.Bind打印插入到向量中的值。 请在下面找到下面的代码:打印使用Boost.Bind向量元素

请让我知道我在这里失踪了什么?

class Test 
    { 
     int i; 

    public: 
     Test() {} 

     Test(int _i) 
     { 
      i = _i; 
     } 

     void print() 
     { 
      cout << i << ","; 
     } 
    }; 


    int main() 
    { 
     std::vector<Test> vTest; 
     Test w1(5); 
     Test w2(6); 
     Test w3(7); 
     vTest.push_back(w1); 
     vTest.push_back(w2); 
     vTest.push_back(w3); 

     std::for_each(vTest.begin(), vTest.end(),boost::bind(boost::mem_fn(&Test::print), _1, ?)); // How do I print Vector elements here? 

    } 
+0

这不是应该如何使用[''std :: for_each''](http://www.cplusplus.com/reference/algorithm/for_each/)。 – NikolayKondratyev

+0

对不起。你能否通过提供一段代码纠正我? – CodeBeginner

回答

1

你可以不用升压这样

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

class Test { 
    int i; 
public: 
    Test() { 

    } 

    Test(int _i) { 
     i = _i; 
    } 

    void print() const { 
     std::cout << i << std::endl; 
    } 
}; 

int main() { 
    std::vector<Test> vTest; 
    Test w1(5); 
    Test w2(6); 
    Test w3(7); 
    vTest.push_back(w1); 
    vTest.push_back(w2); 
    vTest.push_back(w3); 
    // use lambda 
    std::for_each(vTest.begin(), vTest.end(), [&](const Test& t){ t.print(); }); 
    // use std::bind 
    std::for_each(vTest.begin(), vTest.end(), std::bind(&Test::print, std::placeholders::_1)); 
    return 0; 
} 
1

也许你不希望有你的功能print()参数i?如果是这样,你应该简单地这样做:

std::for_each(vTest.begin(), vTest.end(),boost::bind(&Test::print, _1)); 

这将输出类似这样:5,6,7,。见live

如果您仍然希望有一些参数传递给你的函数,那么你应该把它传递给bind()

std::for_each(vTest.begin(), vTest.end(),boost::bind(&Test::print, _1, 0)); 

0将是您Test::print()说法。而且,在你的代码的情况下,你将有下一个输出:0,0,0,。见live

如果您修复功能,下一个:

void print(int i) 
    { 
     cout << this->i << " " << i << ","; 
    } 

输出将是下一个:5 0,6 0,7 0,。见live

1

你不需要绑定那里。 只需用下面的语句替换代码中的for_each即可。

std::for_each(vTest.begin(), vTest.end(), std::mem_fn(&Test::print)) ;