18
2012
10

linux下练习 c++ 类库中list的特性、关联式容器共性介绍

code:

/*
库模版中 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

#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
*/




版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。