#include < iostream> >
#include < algorithm> >
#include < string> >
#include < vector> >
using namespace std;
string make_plural(size_t ctr, const string &word,
const string
&ending)
{
return (ctr
> 1) ? word + ending : word;
}
bool IsShorter(const string &str1, const string &str2)
{
return
str1.size() < str2.size();
}
void ElimDups(vector &words)
{
sort(words.begin(), words.end());
auto
end_unique = unique(words.begin(), words.end());
words.erase(end_unique, words.end());
}
void BiggiesWithFind_if(vector &words,
vector::size_type sz)
{
//按字典排序,
删除重复单词
ElimDups(words);
//按长度排序,
长度相同的维持字典序
stable_sort(words.begin(), words.end(),
[](const string &str1, const string
&str2)
{return
str1.size() < str2.size(); });
//获取一个迭代器,
指向第一个满足size() > sz的元素
auto wc =
find_if(words.begin(), words.end(),
[=](const string &s)//可以使用隐式捕获,
编译器会自己推断捕获内容
//捕获引用使用'&' , 捕获值使用'='
{return
s.size() >= sz;
});
//计算满足条件元素的数目
auto count =
words.end() - wc;
cout
<< count << " " << make_plural(count, "word",
"s")
<< " of
length " << sz << "
or longer" << endl;
//打印每个长度大于等于要求的值的单词, 每个单词后面接一个空格
for_each(wc,
words.end(),
[](const string &s) {cout << s <<
" "; });
cout
<< endl;
}
void BiggiesWithPartition(vector &words,
vector::size_type sz)
{
ElimDups(words);
auto wc =
partition(words.begin(), words.end(),
[sz](const string &str) {return str.size()
< sz; });
//计算满足条件元素的数目
auto count =
words.end() - wc;
cout
<< count << " " << make_plural(count, "word",
"s")
<< " of
length " << sz << "
or longer" << endl;
//打印每个长度大于等于要求的值的单词, 每个单词后面接一个空格
for_each(wc,
words.end(),
[](const string &s) {cout << s <<
" "; });
cout
<< endl;
}
int main(int argc, char **argv)
{
vectorstr_vec{ "the", "red", "fox", "jump",
"over", "the", "slow", "red", "turtle" };
BiggiesWithFind_if(str_vec, 4);
cout
<< "-------------------" << endl;
BiggiesWithPartition(str_vec, 4);
return
0;
}
#include < algorithm> >
#include < string> >
#include < vector> >
using namespace std;
string make_plural(size_t ctr, const string &word,
{
}
bool IsShorter(const string &str1, const string &str2)
{
}
void ElimDups(vector &words)
{
}
void BiggiesWithFind_if(vector &words,
{
}
void BiggiesWithPartition(vector &words,
{
}
int main(int argc, char **argv)
{
}