容器初级入门

1.编写一个循环将list容器的元素逆序输出

#include <iostream>
#include <list>
using namespace std;

int main(void)
{
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    list<int> list1(a,a+10);
    list<int>::iterator iter1 = list1.begin(), iter2 = list1.end();

    while(iter2 != iter1)
        cout<<*(--iter2);
    cout<<endl;

    return 0;
}


2.比较两个容器是否相等

#include <iostream>
#include <vector>
using namespace std;
 
int main(void)
{
    vector<int> ivec;
    vector<int> ilist;
    int val;
    string stringa;
    cout<<"请输入vector元素"<<endl;
    while(cin >> val || cin.fail())
    {
        if(cin.fail())
        {
            cin.clear();
           cin.sync();
            break;
        }
        ivec.push_back(val);
    }
 
    cout<<"请输入list元素"<<endl;
 
 
    while(cin >> val)
    {
        ilist.push_back(val);
    }
 
 
 
 
    vector<int>::iterator iter1 = ivec.begin();
    vector<int>::iterator iter2 = ilist.begin();
 
    while((iter1 != ivec.end()) && (iter2 != ilist.end()))
    {
        if(*iter1 != *iter2)
            break;
        ++iter1;
        ++iter2;
    }
 
    if((iter1 == ivec.end()) && (iter2 == ilist.end()))
    {
        cout<<"vector and list have the same emle"<<endl;
    }
    else
    {
        cout<<"vector and list different"<<endl;
    }
 
    return 0;
}

3.编写一个函数,其形参是一对迭代器和一个int型数值,实现在迭代器标记的范围内寻找该int型数值的功能,并返回一个bool的结果,以指明是否找到指定的数据。

#include <iostream>
#include <vector>
using namespace std;

bool findInt(vector<int>::iterator beg,vector<int>::iterator end,int ival)
{
	while(beg != end)
	{
		if(*beg == ival)
			break;
		else
			++beg;
	}
	if(beg != end)
		return true;
	else
		return false;
}


int main(void)
{
	int a[10]={0,1,2,3,4,5,6,7,8,9};	
	bool f;
	vector<int> ivec(a,a+10);
	vector<int>::iterator iter1 = ivec.begin(),iter2 = ivec.end();
	f = findInt(iter1,iter2,5);
	if(f)
		cout<<"find it"<<endl;
	else
		cout<<"cann't find it"<<endl;

	return 0;
}

4.重写程序,查找元素的值,并且返回指向找到元素的迭代器,确保程序在寻找的元素不存在时也能正确工作。

#include <iostream>
#include <vector>
using namespace std;

vector<int>::iterator findint(vector<int>::iterator beg,vector<int>::iterator end,int val)
{
	while(beg != end)
	{
		if(*beg == val)
			break;
		else
			++beg;
	}
	return beg;
}

int main(void)
{
	int ia[10]={0,1,2,3,4,5,6,7,8,9};
	vector<int> ivec(ia,ia+9);
	//读取要找的数据
	cout<<"Enter a integer: "<<endl;
	int ival;
	cin >> ival;

	vector<int>::iterator it;
	it = findint(ivec.begin(),ivec.end(),ival);

	if(it != ivec.end())
		cout<< ival <<"is a member of vector"<<endl;
	else
		cout<< ival <<"is not a member of vector"<<endl;

	return 0;
}
为了提高程序的通用性,使得对于不同类型的迭代器及元素类型,都能使用同一查找函数进行查找。
使用函数模版


template<typename T1,typename T2>

T1 findValue(T1 beg ,T1 end,T2 val)

{

while(beg != end)

{

if(*beg == val)

break;

else

++beg;

}

return beg;

}

5.insert 函数返回指向这个元素的迭代器

#include <iostream>
#include <list>
using namespace std;

int main(void)
{
    list<string> slist;
    list<string>::iterator iter = slist.begin();
    string word;

    while(cin >> word)
        iter = slist.insert(iter,word);


    for(list<string>::iterator iter = slist.begin(); iter != slist.end(); ++iter)
    {   
        cout<<*iter<<endl;  
    }   

    return 0;
}

6.编写程序将int型的list容器的所有元素复制到两个deque容器中。list容器的元素如果为偶数,则复制一个deque容器中,如果为基数,则复制到另一个deque容器里

#include <iostream>
#include <list>
#include <deque>

using namespace std;

int main(void)
{
    int a[10]={0,1,2,3,4,5,6,7,8,9};
    list<int> ilist(a,a+10);
    deque<int> deque1,deque2;
    deque<int>::iterator ideq1 = deque1.begin(),ideq2 = deque2.begin();

    for(list<int>::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
    {
        if((*iter %2) == 0)
            deque1.push_back(*iter);
        else
            deque2.push_back(*iter);
    }

    for(ideq1 = deque1.begin(); ideq1 != deque1.end();++ideq1)
        cout<<*ideq1<<endl;
    cout<<"***********************************************************"<<endl;
    for(ideq2 = deque2.begin(); ideq2 != deque2.end();++ideq2)
        cout<<*ideq2<<endl;


    return 0;

}

7.假设有如下ia的定义,将ia复制到一个vector容器和一个list容器中,使用单个迭代器参数版本erase函数将list容器中的奇数值元素删除掉,然后将vector容器中的偶数值元素删除掉

#include <iostream>
#include <vector>
#include <list>

using namespace std;

int main(void)
{
	int ia[]={0,1,2,3,4,5,6,7,8,9};
	vector<int> ivec(ia,ia+10);
	list<int>  ilst(ia,ia+10);

	for(list<int>::iterator lit = ilst.begin(); lit != ilst.end();++lit)
	{
		if(*lit %2 != 0)	
		{
			lit = ilst.erase(lit);
			--lit; //迭代器回退,指向被删除元素的前一元素
		}
	}

	for(vector<int>::iterator vit = ivec.begin(); vit != ivec.end();++vit)
	{
		if(*vit %2 == 0)	
		{
			vit = ivec.erase(vit);
			--vit;
		}
	}
	for(list<int>::iterator lit = ilst.begin(); lit != ilst.end();++lit)
	{
		cout<<*lit<< " ";
	}
	cout<<endl;
	for(vector<int>::iterator lit = ivec.begin(); lit != ivec.end();++lit)
	{
		cout<<*lit<< " ";
	}
	cout<<endl;
	return 0;
}


8.编写程序将一个list容器的所有元素赋值给一个vector容器,其中的list容器中的存储的是指向c风格的char *指针,而vector容器的元素则是string类型

#include <iostream>
#include <vector>
#include <list>

using namespace std;

int main()
{
	char * sa[]={"Mary","Tom","Bob","Alice"};
	list<char *> slst(sa,sa+4);
	vector<string> svec;
	string str;

	svec.assign(slst.begin(),slst.end());

	for(list<char *>::iterator lit = slst.begin(); lit != slst.end();++lit)
	{
		cout<<*lit<<" ";
	}
	cout<<endl;

	for(vector<string>::iterator vit = svec.begin(); vit != svec.end();++vit)
	{
		cout<<*vit<<" ";
	}
	cout<<endl;
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值