作爲家庭作業的一部分,我們應該映射地圖中每個角色的出現。我們的函數應該使用std :: for_each並傳入要評估的字符。STL for_each抱怨參數列表
我的功能是:
std::for_each(document_.begin(),
document_.end(),
std::mem_fun(&CharStatistics::fillMap));
document_
是string
,並且fillMap函數的定義如下
void CharStatistics::fillMap(char ch)
{
ch = tolower(ch);
++chars_.find(ch)->second;
}
chars_
被聲明爲std::map<char, unsigned int> chars_;
。
我想這應該工作,但是編譯器抱怨
error C2064: term does not evaluate to a function taking 1 arguments
這讓我困惑,因爲當我看着參數列表
_Fn1=std::mem_fun1_t<void,CharStatistics,char>,
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>,
1> _Result=void,
1> _Ty=CharStatistics,
1> _Arg=char,
1> _InIt=std::_String_iterator<char,std::char_traits<char>,std::allocator<char>>
它看起來好像沒什麼問題。 _Elem是一個字符,我的函數接受一個字符。迭代器只是一個char *
我在做什麼錯?
bind2nd不會那麼做的,你寫的是一個boost ::綁定或std ::綁定(新標準)建造。你將得到一個編譯器錯誤,因爲bind2nd只接受2個參數,一個函數和一個參數。 – CashCow 2011-01-20 12:19:07
@CashCow:啊,你說得對。我總是使用`boost :: bind`。編輯。 – 2011-01-20 12:21:05