std::vector<int> my_ints;
my_ints.push_back(1);
my_ints.push_back(2);
my_ints.push_back(3);
my_ints.push_back(4);
std::for_each(my_ints.begin(), my_ints.end(), std::cout.operator <<);
答案 0 :(得分:15)
因为那是一个成员函数,而for_each
想要一个带有单个参数的函数对象。
你必须编写自己的函数:
void print_to_stdout(int i)
{
std::cout << i;
}
std::for_each(my_ints.begin(), my_ints.end(), print_to_stdout);
另一种方法是混合std::mem_fun
和std::bind1st
(或任何更好的C ++ 0x / boost替代品)来生成该函数。
但最好的方法是将std::copy
与std::ostream_iterator
:
std::copy(my_ints.begin(), my_ints.end(), std::ostream_iterator<int>(std::cout));
答案 1 :(得分:3)
std::for_each
需要一个具有单个参数的函数,即您正在迭代的容器元素。但是,operator <<
需要两个参数,即操作符的左侧和右侧。所以事情没有排好。
您必须以某种方式绑定ostream参数,以便再次使用单个参数。 boost::bind
是单向的,或者你可以定义一个自定义的单个参数函数并传递它。
答案 2 :(得分:2)
for_each接受一个函数作为要应用于范围元素的最后一个参数, 定义一个函数应该做什么
void print(int i){
cout << i << endl;
}
然后
for_each(vector.begin(), vector.end(), print)
如果这是你正在尝试的......