习题 9.20
编写程序判断一个 vector容器所包含的元素是否与一个 list容器的完全相同
第一种思路:两个容器的元素分别比较
#include <iostream> //习题9.20
#include<vector>
#include<list>
using namespace std;
int main()
{
vector<int>ivec;
cout << "Enter some numbers for vector(ctrl+z to end):\n";
int m;
while (cin >> m)
ivec.push_back(m);
cin.clear();
list<int> ilist1;
cout << "Enter some numbers for list(ctrl+z to end):\n";
while (cin >> m)
ilist1.push_back(m);
if (ivec.size() != ilist1.size()) //这个if 可以省略,但是带着如果两个容器中元素不同,可以加快程序的执行
{
cout << "这两个容器中的元素不完全相同。";
return 0;
}
vector<int>::iterator itv = ivec.begin();
list<int>::iterator iti = ilist1.begin();
//由于for循环的初始化条件有2个,只能在for循环外面初始化了
for ( ; itv != ivec.end()&&iti!=ilist1.end(); ++itv, ++iti) //我这个for循环写的写的太好了!
if (*itv != *iti)
break;
if (itv == ivec.end()) //如果循环走到了最后
cout << "这两个容器中的元素完全相同。" << endl;
else
cout<< "这两个容器中的元素不完全相同。"<< endl; //这个else 可以省略掉,为了更容易理解,带上了
return 0;
}
第二种思路:先把 vector 中的元素都复制到另外一个新建的 list 中,然后就可以直接比较了
#include <iostream>
#include<vector>
#include<list>
using namespace std;
int main()
{
vector<int>ivec;
cout << "Enter some numbers for vector(ctrl+z to end):\n";
int m;
while (cin >> m)
ivec.push_back(m);
cin.clear();
list<int> ilist1;
cout << "Enter some numbers for list(ctrl+z to end):\n";
while (cin >> m)
ilist1.push_back(m);
cin.clear();
if (ivec.size() != ilist1.size()) //这个if 可以省略,但是带着如果两个容器中元素不同,可以加快程序的执行
{
cout << "这两个容器中的元素不完全相同。";
return 0;
}
list<int> ilist2;
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
{
ilist2.push_back(*iter);
}
if(ilist1==ilist2)
cout<< "这两个容器中的元素完全相同。" << endl;
else
cout << "这两个容器中的元素不完全相同。" << endl;
return 0;
}