4
從矢量中刪除字符串我試圖從矢量中刪除短字符串。通過boost :: bind
std::vector<std::string> vec;
// ...
vec.erase(std::remove_if(vec.begin(),
vec.end(),
boost::bind(std::less<size_t>(),
boost::bind(&std::string::length, _1),
5),
vec.end());
編譯器吐出了一個非常大的錯誤消息:
qwer.cpp:20: error: no matching function for call to 'remove_if(__gnu_cxx::__nor
mal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char
> >*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator
<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::al
locator<char> > > > >, __gnu_cxx::__normal_iterator<std::basic_string<char, std:
:char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_strin
g<char, std::char_traits<char>, std::allocator<char> > > > >, boost::_bi::bind_t
<boost::_bi::unspecified, std::less<unsigned int>, boost::_bi::list2<boost::_bi:
:bind_t<unsigned int, boost::_mfi::cmf0<unsigned int, std::basic_string<char, st
d::char_traits<char>, std::allocator<char> > >, boost::_bi::list1<boost::arg<1>
> >, boost::_bi::value<int> > >, __gnu_cxx::__normal_iterator<std::basic_string<
char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_st
ring<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::b
asic_string<char, std::char_traits<char>, std::allocator<char> > > > >)'
以下解決方案的工作:
vec.erase(std::remove_if(vec.begin(),
vec.end(),
boost::bind(&std::string::length, _1) < 5),
vec.end());
但是,我還是好奇,我在第一次做錯了版。謝謝!
洛爾謝謝,這是一個愚蠢的錯誤。 – fredoverflow 2010-01-16 02:55:48
恩,所以現在編譯?仍然看着我......我甚至不知道爲什麼你的第二個「解決方案」甚至編譯。 – 2010-01-16 03:34:13
綁定使一些運算符重載,從而更快地編寫謂詞。這是一個非常整潔的功能:http://www.boost.org/doc/libs/1_41_0/libs/bind/bind.html #operators – 2010-01-16 03:52:27