/* 库模版中 list 特性: 双向链表 增删:.push_front(element),.pop_front(),.remove(element) 不支持下标访问 除去重复:.unique() 相邻的重复元素只保留一个 排序:.sort(),默认用'<'号比较,自定义类型要重载运算符 倒置:.reverse() 转移:.aplice(pos,list2),.aplice(pos,list2,pos2), .aplice(pos,list2,pos2_begin,pos2_end) 归并:.merge(list2) */ #include<iostream> using namespace std; #include<list> #include<cassert> #include "print.h" bool mult3(int x,int y)//模3的余数从小到大 { x%=3; y%=3; return x<y; } int main() { int a[7]={3,5,5,8,5,1,6}; int b[5]={5,7,9,2,4}; list<int> li(a,a+7),li2(b,b+5); print(li.begin(),li.end()); li.unique();//可自定义判断相等的函数 print(li.begin(),li.end()); li.sort();//排序 li.unique();//去重 print(li.begin(),li.end()); li.reverse();//倒序 print(li.begin(),li.end()); li.splice(li.begin(),li2);//转移 print(li.begin(),li.end()); assert(li2.empty());//判断是否为空,为假时才报错 li.remove(5);//删除值为5的所有元素 print(li.begin(),li.end()); li.sort();li.unique();//去重 print(li.begin(),li.end()); li2.push_back(3);li2.push_back(5); li2.push_back(9);li2.push_back(10); print(li2.begin(),li2.end()); li.merge(li2);//将li2合并到li中 print(li.begin(),li.end()); b[3]=6; li2.assign(b,b+5); print(li2.begin(),li2.end()); li2.sort(greater<int>());//用'>'排序,从大到小 print(li2.begin(),li2.end()); li2.sort(mult3);//用自写规则排序,从小到大 print(li2.begin(),li2.end()); return 0; }
//print.h
//print.h #include <iostream> using namespace std; #ifndef print_fun #define print_fun template<typename T> ///显示序列数据 void print(T b,T e,char c=' ') { bool isExit=false; while (b!=e) { cout<<*b++<<c; isExit=true; } if(isExit) cout<<endl; } #endif
/* 关联式容器共性:二叉查找树实现,自动根据关键字排序 set<K>,multiset<K>,map<K,V>,multimap<K,V> 查找:.find(key) 失败返回.end() 统计:.count(key) 删除:.erase(key) 插入:.insert(element) 区间:.lower_bund(key) //取得关键字为key的第一个元素位置 .upper_bound(key) //取得关键字为key的最后一个元素之后的位置 .equal_range(key) 取得关键字为key的区间,返回pair */