C++标准程序库 学习笔记 第六章 容器

1.  vector 动态数组   deque 双向队列        特点很鲜明,成员函数具体再看书本~~

    list. 和关联容器   应该调用成员函数,而不是泛型算法

2 . list  主要看 splice(拼接,删除源list,拼接到目的list) ..        merge(  合并.. 删除源,合并到目的,并且有序)

eg: 

/*
author:wzy1222 ;
email: 627440781@qq.com
*/
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;

void print(const list<int> &lst1,const list<int> &lst2)
{
	cout<<"list 1:";
	copy(lst1.begin(),lst1.end(),ostream_iterator<int>(cout," "));
	cout<<endl;

	cout<<"list 2:";
	copy(lst2.begin(),lst2.end(),ostream_iterator<int>(cout," "));
	cout<<endl;
}
int main()
{
	list<int> list1,list2;
	for(int i=1;i<=5;++i)
	{
		list1.push_back(i);
		list2.push_front(i);
	}
	print(list1,list2);

	// splice 拼接   把A拼接到B  A里面的函数被删除.
	list2.splice( list2.begin(),list1);
	print(list1,list2);

	list2.sort( );
	print(list1,list2);
	

	list1=list2;
	print(list1,list2);

	// merge 按原先顺序,删除源list,复制到目的list.
	list1.merge(list2);
	print(list1,list2);
	system("PAUSE");
	return 0;
}


2013.04.12笔记:

set map都是关联式容器,链表的感觉,要访问就用迭代器哟。


3. set 和 multiset 

   insert函数   返回值是pair<iter, bool> 型.   erase~

/*
author: wzy1222 ;
email: 627440781 
*/
#include <iostream>
#include <set>
#include <iterator>
using namespace std;

int main()
{
	int arr[]={4,3,5,1,6,2,5};
	set<int,greater<int> > iset(arr,arr+7);
	
	copy(iset.begin(),iset.end(), ostream_iterator<int>(cout," "));
	cout<<endl;

	// insert
	pair< set<int,greater<int> >::iterator , bool> statu = iset.insert(4);
	if( statu.second )
	{
		cout<< "成功被插入"<<endl;
	}
	else
		cout<<"元素已经存在"<<endl;


	set<int> iset2(iset.begin(),iset.end());
	copy(iset2.begin(),iset2.end(), ostream_iterator<int>(cout," "));
	cout<<endl;

	// erase
	iset2.erase(5);
	copy(iset2.begin(),iset2.end(), ostream_iterator<int>(cout," "));
	cout<<endl;
	iset2.erase(iset2.begin(),iset2.find(3));
	copy(iset2.begin(),iset2.end(), ostream_iterator<int>(cout," "));
	cout<<endl;
	system("PAUSE");

	return 0;
}

4 map和multimap

关联容器,里面的元素都是pair对. 插入的时候注意用 make_pair就OK拉~   

注意用  simap["wzy"]=100;  会强制插入wzy..   

multimap用来做词典很方便.  一个键多个值,用到 lower_bound  upper_bound  跟迭代器配合用无敌.

/*
author: wzy1222 ;
email: 627440781
*/
#include <iostream>
#include <map>
#include <string>
using namespace std;
//multimap  主要了解下 lower_bound upper_bound用法
int main()
{
	typedef multimap<string,int> StrIntMap;
	StrIntMap dict;

	dict.insert(make_pair("wzy",6));
	dict.insert(make_pair("wzy2",2));
	dict.insert(make_pair("wzy3",3));
	dict.insert(make_pair("wzy4",4));
	dict.insert(make_pair("wzy5",5));


//	dict["wzy"]=3;  error  multimap不能这样子
	dict.insert(make_pair("wzy",5));
	dict.insert(make_pair("wzy",4));
	dict.insert(make_pair("wzy",4));
	


	for(StrIntMap::iterator iter=dict.begin();iter!=dict.end();++iter)
	{
		cout<< iter->first << " "<<iter->second <<endl;
	}
	string word("wzy");
	for(StrIntMap::iterator iter=dict.lower_bound(word);iter!=dict.upper_bound(word);++iter)
	{
		cout<<iter->first<< "------------>"<<iter->second<<endl;
	}
	system("PAUSE");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值