删除容器中重复字符串并按长度排序…

来源:互联网 发布:我知谁掌管明天歌词 编辑:程序博客网 时间:2024/05/23 19:19
#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)
{
    returnstr1.size() < str2.size();
}

void ElimDups(vector &words)
{
   sort(words.begin(), words.end());

    autoend_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)
    {returnstr1.size() < str2.size(); });

    //获取一个迭代器,指向第一个满足size() > sz的元素
    auto wc =find_if(words.begin(), words.end(),
      [=](const string &s)//可以使用隐式捕获,编译器会自己推断捕获内容
                     //捕获引用使用'&' , 捕获值使用'='
    {returns.size() >= sz;   });

   //计算满足条件元素的数目
    auto count =words.end() - wc;
    cout<< count << " " << make_plural(count, "word","s")
      << "  oflength  " << 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")
      << "  oflength  " << 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);
    return0;
}

0 0
原创粉丝点击