奇怪的现象
程序代码:
#include<iostream> #include<vector> #include<algorithm> using namespace std; bool isShorter (const string&s1,const string&s2) { return s1.size()<s2.size(); } bool GT6(const string &s) {return s.size()>=6;} string make_plural( size_t t, const string&word,const string&ending){ return t==1?word:word+ending; } int main(){ string x; vector<string>vec; while(cin>>x){ vec.push_back(x); } sort(vec.end(),vec.end()); vector<string>::iterator end_unique= unique(vec.begin(),vec.end()); vec.erase(end_unique,vec.end()); stable_sort(vec.begin(),vec.end(),isShorter); vector<string>::size_type wc=count_if(vec.begin(),vec.end(),GT6); cout<<wc<<" "<<make_plural(wc,"word","s")<< "6 characters or longer"<<endl; vector<string>::iterator it=vec.begin(); for(;it!=vec.end();++it) cout<<*it<<" "; return 0; }
这段代码用于 删除输入文本中重复的单词 ,并统计出长度大于6的单词,最后按长度的顺序输出单词;
但是在最后按长度顺序输出时出现了问题。
我当输入 dd dd ddd ddd dddd dddd 时输出是 dd ddd dddd,符合预期的效果;
但是当我输入 dd ddd dddd dd ddd dddd时输出是dd dd ddd ddd dddd dddd,不符合预期的效果;
为什么当两个相同的相邻时,erase 起作用了。
不相邻时。erase 没有起作用。