求助:关于C++容器方面的问题

2025-03-18 20:51:44
推荐回答(2个)
回答1:

#include
#include
#include

using namespace std;

bool search(vector::iterator ite1,vector::iterator ite2,int num)
{

while(ite1!=ite2)
{
if(*ite1++==num)//这里要加个++
{
return 1;
}
}
return 0;
}
void main()
{
vector vec;
int n;
int num;

cout<<"输入数据"< while(cin>>n)
{
vec.push_back(n);
}
cin.clear();//清除错误的输入状态
//getchar();
cin.ignore();//读取并抛弃

cout<<"请输入你要查找的数字"< cin>>num;

if(search(vec.begin(),vec.end(),num))
{
cout<<"找到了"< }
else
{
cout<<"没找到你请求的数字"< }
}

这里会造成无法输入是因为错误的输入状态和if(*ite1==num)这个造成的,当输入非整形数据时,while循环停止当那个非整形数据依然停留在缓存区,下次输入时便会在缓存区直接读取并不会提示输入所以num就被赋予了一个错误的数值。

要解决这个问题应该把缓存区的非整形数据读取出来并抛弃掉,注意,如果是错误的输入有可能会导至对后面的输入关闭所以先用cin.clear(),来清除错误的输入状态再用getchar(),或cin.ignore();来取出缓冲区的非整形数据,这样就可以正常输入了

进入子函数时if(*ite1==num)ite1永远没变化所以ite1不可能等于ite2死循环就是在这里造成的。所以if(*ite1==num)ite1因改为if(*ite1++==num)ite1。

回答2:

这个和容器没有关系
因为在循环
while(cin>>n)
{
vec.push_back(n);
}
中,要中止循环,使用了ctrl+z,将cin流置为了错误状态,所以在下一次使用cin时不能进行输入。只要在
cout<<"请输入你要查找的数字"<后面加一句 cin.clear(); 重置cin流就可以了