2011-05-02 72 views
1
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 <<); 

回答

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_funstd::bind1st(或任何更好的C++ 0x /升壓替代品)來生成功能。

但是,最好的辦法是使用std::copystd::ostream_iterator

std::copy(my_ints.begin(), my_ints.end(), std::ostream_iterator<int>(std::cout)); 
2

的for_each接受一個函數作爲最後一個參數應用在範圍內的元素, 定義一個函數應該做的事情,你有什麼

void print(int i){ 
    cout << i << endl; 
} 

然後

for_each(vector.begin(), vector.end(), print) 

如果這是你正在嘗試...

3

std::for_each需要一個函數,它有一個參數,你正在迭代的容器的元素。但是,operator <<需要兩個參數,即運算符的左側和右側。所以事情不排隊。

您必須以某種方式綁定ostream參數,以便您再次下到單個參數。 boost::bind是一種方法,或者您可以定義一個自定義的單個參數函數並傳遞該函數。

相關問題