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;
}