首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

用迭代器查找的有关问题

2012-06-14 
用迭代器查找的问题C/C++ code#includestring#includevector#includeiostream#includelist/**编写

用迭代器查找的问题

C/C++ code
#include<string>#include<vector>#include<iostream>#include<list>/**编写一个函数,其形参是一对迭代器和一个int型数值。*实现在迭代器标记的范围内寻找该int型数值的功能,并返回一个bool的结果*以指明是否找到指定数据。*/using namespace std;bool findtarget(int number,vector<int>::iterator itera1,vector<int>::iterator itera2)//用来寻找在两个迭代器范围内的数{    bool bvalue=false;    while(itera1!=itera2)//while循环不执行直接跳过去了,原因是itera1==itera2.为什么?    {           cout<<"YES"<<endl;        if(*itera1==number)        {               cout<<"YES"<<endl;            bvalue=true;            break;        }        else            ++itera1;    }    return bvalue;}void main(){    int temp;    int target;    vector<int> ivec;    //list<int> ilist;    //vector<int>::iterator iter2=ivec.end();    while(cin>>temp,cin.eof())//这个我想联系一下错误处理的。    {        if(cin.bad())            throw runtime_error("IO stream corrupted");        if(cin.fail())        {            cerr<<"bad data,try again";            cin.clear();            cin.sync();            continue;        }        if(temp==-1)            break;        ivec.push_back(temp);    }    cout<<"Please input your target:"<<endl;    cin.clear();//这里应该结合使用    cin.sync(); //    cin>>target;//要查找的数    vector<int>::iterator iter1=ivec.begin();    vector<int>::iterator iter2=ivec.end();    cout<<"The result of the function is:"<<endl;    cout<<findtarget(target,ivec,iter1,iter2)<<endl;//调用函数   }


问题应该是出在findtarget函数中。原因是因为迭代器的值没有传过去吗?while循环是不执行的。我在代码里也注释了。
什么原因呢?谢谢各位了。

[解决办法]
正常输入数字时,cin.eof()的值为0,!cin.eof()的值为true,进循环push_back。

如果不加取反,则正常输入数字时,不会进循环,ivec就是空的了,itera1和itera2就相等了。

热点排行