注册 登录
编程论坛 C++教室

奇怪的现象

未未来 发布于 2013-04-12 19:39, 482 次点击
程序代码:
#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 没有起作用。
7 回复
#2
peach54602013-04-12 19:45
哟,看得挺快
已经看到算法了呀
#3
peach54602013-04-12 19:47
sort(vec.end(),vec.end());
谁教的?
#4
未未来2013-04-12 19:54
回复 2楼 peach5460
>< 又在你面前丢人了。下次发帖绝对自己检查十遍!!
再问个小问题,
erase 操作后,防止失效是不是可以 重新定义一下 迭代器。
#5
peach54602013-04-12 19:56
以下是引用未未来在2013-4-12 19:54:19的发言:

>< 又在你面前丢人了。下次发帖绝对自己检查十遍!!
再问个小问题,
erase 操作后,防止失效是不是可以 重新定义一下 迭代器。

定义个P啊
erase不是有返回值吗?

PS:你先去学一下怎么调试吧...
下次发帖之前确信自己调试没结果再发
#6
peach54602013-04-12 21:13
又被我骂得人不见了
哎,我又傲娇了
#7
未未来2013-04-12 22:31
以下是引用peach5460在2013-4-12 21:13:02的发言:

又被我骂得人不见了
哎,我又傲娇了

切,,我抗击能力强着呢,
 我有个程序调试出现了STL 什么东东,
我觉得是应该系统地去学学调试程序了TT
#8
peach54602013-04-13 06:37
以下是引用未未来在2013-4-12 22:31:27的发言:

 
切,,我抗击能力强着呢,  
 我有个程序调试出现了STL 什么东东,
我觉得是应该系统地去学学调试程序了TT

学吧,学吧...快去学吧...
1