//为了方便,要包含的文件会不同,但我没有删
#include <iostream>
#include <string>
#include <vector>
#include <bitset>
#include <cstring> //和C语言的string.h其实是一个版本
using std::bitset;
using std::vector;
using std::cin;
using std::endl;
using std::cout;
using std::string;
//---------------------------------------------------------------------------
int main()
{
vector<int> ivec1,ivec2;
//给两个vector赋值
cout<<"请输入第一个vector内的int:"<<endl;
int i=0;
while(cin>>i)
ivec1.push_back (i);
cout<<"请输入第二个vector内的int:"<<endl;
cin.clear (); //如没有cin.clear()语句,程序不会执行下面的while语句,说明此时cin>>i没有返回真值
cin.sync(); //用此句清空内存,否则如前面有输入非int,则会使cin处于错误装态
//如用0 1 1 2并把结束符输在同一行,则会使第二个cin输入语句失效,但如果换行后再输结束符,则可以,但加了sync后就都可以了
//这可能也说明换行输入ctrl+z可以自动清空流,但始就直接输入就不行
while(cin>>i)
ivec2.push_back (i);
//比较是否前面是相同的
bool b=true;
if(ivec1.size ()<=ivec2.size ()) //ite1内的元素较少,以它作边界
{
for(vector<int>::iterator ite=ivec1.begin (),ite2=ivec2.begin ();ite!=ivec1.end ();++ite,++ite2)
{
if(*ite!=*ite2)
{
b=false;
break;
}
else
b=true;
}
}
else //ite2内的元素较少,以ite2为边界
{
for(vector<int>::iterator ite=ivec1.begin (),ite2=ivec2.begin ();ite2!=ivec2.end ();++ite,++ite2)
{
if(*ite!=*ite2)
{
b=false;
break;
}
else
b=true;
}
}
//输出结果
if(b)
cout<<"存在前缀关系"<<endl;
else
cout<<"不存在前缀关系"<<endl;
return 0;
}
/*
181页习题6.16,比较两个vector<int>对象,看是否有前缀关系
*/