4
벡터에서 짧은 문자열을 제거하려고합니다.boost :: bind를 통해 벡터에서 문자열을 제거합니다.
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> > > > >)'
다음 솔루션은 작동합니다 :
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());
는 컴파일러는 매우 큰 오류 메시지가 뱉어
vec.erase(std::remove_if(vec.begin(),
vec.end(),
boost::bind(&std::string::length, _1) < 5),
vec.end());
을하지만 난 여전히 내가 처음에 뭘 잘못했는지에 관해서 궁금 번역. 감사!
감사합니다. 그것은 어리석은 실수였습니다. – fredoverflow
음, 이제 컴파일됩니까? 아직도 저를 보며 .. 두 번째 "솔루션"이 왜 컴파일되는지조차 알지 못합니다. –
바인드는 일부 연산자를 오버로드하여 작성 술어를 더 빠르게 만듭니다. 매우 정교한 기능입니다. http://www.boost.org/doc/libs/1_41_0/libs/bind/bind.html#operators –