inline void output_words(vector<string> &words)
{
for (auto i : words) {
cout << i << " ";
}
cout << endl;
}
bool isShorter(const string &s1, const string &s2)
{
return s1.size() < s2.size();
}
void elimDups(vector<string> &words)
{
output_words(words);
sort(words.begin(), words.end());
output_words(words);
auto end_unique = unique(words.begin(), words.end());
output_words(words);
words.erase(end_unique, words.end());
output_words(words);
stable_sort(words.begin(), words.end(), isShorter);
output_words(words);
}
int main()
{
vector<string> words;
string word;
ifstream in("data");
while (in >> word)
words.push_back(word);
elimDups(words);
}
inline void output_words(vector<string> &words)
{
for (auto i : words) {
cout << i << " ";
}
cout << endl;
}
inline bool five_or_more(const string &str1)
{
return (str1.size() > 5) || (str1.size() == 5);
}
int main()
{
vector<string> str;
string word;
ifstream in("data.txt");
if (!in) {
cerr << "未打开文件" << endl;
return -1;
}
while (in >> word)
str.push_back(word);
output_words(str);
auto iter = partition(str.begin(), str.end(), five_or_more);
output_words(str);
for (auto iter1 = str.begin(); iter1 != iter; iter1++)
cout << *iter1 << " ";
cout << endl;
}