list程序详解

#include<iostream>

#include<list>

#include<string>

using namespace std;

class Student{  

string m_strNO;

 string m_strName;

 string m_strUniversity; 

 int m_nTotal;            //总分

public:

 Student(string strNO,string strName,string strUniversity,int Total):  

  m_strNO(strNO),m_strName(strName),m_strUniversity(strUniversity),m_nTotal(Total)   

{

   }   

bool operator<(Student& s)

   {    

return m_strNO<s.m_strNO;  

  }

   bool operator==(Student& s)    {   

  return m_strNO==s.m_strNO;   

}

   string GetNO()    {     return m_strNO;    }   

string GetName()    {     return m_strName;    }  

  string GetUniversity()    {     return m_strUniversity;    }

   int GetTotal()    {     return m_nTotal;    }

};

ostream& operator<<(ostream& os,Student& s)     //重载运算符的实现

{

 os<<s.GetNO()<<"\t"<<s.GetName()<<"\t"<<s.GetUniversity()<<"\t"<<s.GetTotal();

 return os;

}

typedef list<Student> LISTSTUD;

class stuManage {  

LISTSTUD m_stlList;     //定义list<Student>类型的数据  list是一个双向链表

public:  bool Add(const Student &s)  {  

 m_stlList.push_back(s);   //将s加入list中

  return true;

 }

 bool Merge(stuManage& std)  {

  m_stlList.sort();  

 std.m_stlList.sort(); //m_stlList是stuManage的数据元素,   //只不过m_stlList这个数据元素是一个list类型的类   

m_stlList.merge(std.m_stlList);  //合并两个list类型

  m_stlList.unique();     //容器内相邻元素若有重复的,则仅保留一个

  return true;

 }

 void Show()  {  

 for(LISTSTUD::iterator it=m_stlList.begin();it!=m_stlList.end();it++)  

 {    cout<<*it<<endl;   }

 }

};

void main() {

 stuManage sm1;   //每一个stuManage类中都有一个list链表

 stuManage sm2;

 Student s1("1001","zhangsan","tsinghua",670);

 Student s2("1002","lisi","beida",660);  

Student s3("1003","wangwu","fudan",650);

 Student s4("1004","zhaoliu","nankai",640);  

Student s5("1005","zhouqi","tongji",630);

 sm1.Add(s1);  

sm1.Add(s2);

 sm1.Add(s5);

 sm2.Add(s5);

 sm2.Add(s4);

 sm2.Add(s3);

 sm2.Add(s1);

 sm1.Merge(sm2);

 sm1.Show();

}

 

 

该程序有一个基本类Student,一个集合维护类StuManage,

StuManage类Merge成员函数封装了两个list容器的排序,合并及去掉重复元素的功能

由于对list容器均是按学号进行排序、合并的,因此要重载基本类Student中的operator<操作符。又由于要按学号是否相同去掉重复记录,因此必须重载基本类Student中的operaror==操作符。

posted @ 2014-03-27 14:01  zhoudan  阅读(318)  评论(0)    收藏  举报