Hi. I am trying to run this program.
Code:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
string make_plural(int count,const string &s1,const string &s2)
{
    if(count<1)
    return s1;
    else
    return s1+s2;
}
bool have5(const string &s)
{
    return s.size()>=5;
}
bool isShorter(const string &s1,const string &s2)
{
    return s1.size()>s2.size();
}
void elimDuops(vector<string> &words)
{
sort(words.begin(),words.end());
vector<string>::iterator it=unique(words.begin(),words.end());
for(int i=0;i<words.size();++i)
cout<<words[i]<<" ";
cout << endl;
words.erase(it,words.end());
}

void biggies(vector<string> &words,vector<string>::size_type sz)
{

    elimDuops(words);
    stable_sort(words.begin(),words.end(),isShorter);
    vector<string>::iterator wc=find_if(words.begin(),words.end(),[sz](const string &a){return a.size()>=sz;});

int count = words.end()-wc;
cout << count << " " << make_plural(count, "word", "s" ) << " of length " << sz << " or longer" << endl;




}
int main(int argc,char **argv)
{
    vector<string> fox;
    ifstream in(argv[1]);
    string s;
    while(in>>s&&!in.eof())
    fox[.push_back(s);
    for(int i=0;i<fox.size();++i)
    cout<<fox[i]<<" ";
    cout<<endl;
    partition(fox.begin(),fox.end(),have5);
    for(int i=0;i<fox.size();++i)
    cout<<fox[i]<<" ";
    cout<<endl;
    biggies(fox,5);

}
in codeblocks it runs fine. But when I run it in ubuntu terminal in g++ it gives the following error.

10.13.cpp:37:110: error: no matching function for call to ‘find_if(std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, biggies(std::vector<std::basic_string<char> >&, std::vector<std::basic_string<char> >::size_type)::<lambda(const string&)>)’
10.13.cpp:37:110: note: candidate is:
/usr/include/c++/4.6/bits/stl_algo.h:4418:5: note: template<class _IIter, class _Predicate> _IIter std::find_if(_IIter, _IIter, _Predicate)
why is that?