星期日, 7月 23, 2006

for_each??

在泛型程式設計與STL (Generic Programming and STL)中,我讀到for_each 屬於 Nonmutating Algorithm,怪了...我以前不懂for_each時,都直接屬使用來改變在此range的值的,難道我想錯了...

來看看for_each的prototype(p.218)

template<class InputIterator, class UnaryFunction>
UnaryFunction for_each(InputIterator first, InputIterator last,
UnaryFunction f);

如果今天所使用的是vector<int>的話,那麼...UnaryFuncion的return type(Result Type)暫且不論,UnaryFuncion的Argument Type也必定是int才行,那麼我在gcc 上面使用int&,卻過了,這是不是傷害到原本的規格制定?

所以,我用了一個很簡單的程式碼來測試一下


#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;

template<class T>
class pow2{
public:
void operator()(T &p){ p=p*p; }
};

int main(){
vector<int> u;
for(unsigned int i=0;i<5;i++) u.push_back(i+1);

for_each(u.begin(),u.end(),pow2<int>());
copy(u.begin(),u.end(),ostream_iterator<int>(cout," "));

cout << endl;
system("pause");
}




還是說,我想錯了...當然,照書上所寫的...Argument Type是會正確,還是我自己用錯了...Orz 暫時不知道,繼續看書去

張貼留言