C++系统List类库常用demo

//
//  CStudent.hpp
//  标准C++类库_list
//
//  Created by 张凯泽 on 17/3/28.
//  Copyright © 2017年 rytong_zkz. All rights reserved.
//

#ifndef CStudent_hpp
#define CStudent_hpp

#include <stdio.h>
#include <list>
typedef struct StudentInfo{
    char name[20];
    int age;
}DATA;
typedef std::list<DATA> :: iterator POSITION;
class CStudent{
    std::list<DATA>List;
    
public:
    CStudent();
    ~CStudent();
    void AddHeader(DATA&data);
    void AddTailer(DATA&data);
    void ShowNote();
    POSITION GetHeadPosition();
    POSITION GetTailPosition();
    DATA GetNext(  POSITION &pos);
    DATA GetPrev(POSITION &pos);
    int GetCount();
    void RemoveAt(POSITION &pos);
    DATA& GetAt(POSITION &pos);
    void InsertData(POSITION & pos,DATA &data);
    
};
#endif /* CStudent_hpp */
//
//  CStudent.cpp
//  标准C++类库_list
//
//  Created by 张凯泽 on 17/3/28.
//  Copyright © 2017年 rytong_zkz. All rights reserved.
//

#include "CStudent.hpp"
#include <iostream>
using namespace std;
CStudent ::CStudent()
{
    
}
CStudent ::~CStudent()
{
    List.clear();
}
POSITION CStudent :: GetHeadPosition()
{
    return List.begin();
}
POSITION CStudent :: GetTailPosition()
{
    return List.end();
}
int CStudent :: GetCount() 
{
    return List.size();
}
DATA CStudent :: GetNext(POSITION &pos)
{
        return *pos++;//先取值再++
}
DATA CStudent :: GetPrev(POSITION &pos)
{
    return *(--pos);
}
void CStudent :: AddHeader(DATA&data)
{
    List.push_front(data);
}
void CStudent:: AddTailer(DATA&data)
{
    List.push_back(data);
}
void CStudent :: RemoveAt(POSITION &pos)
{
    List.erase(pos);
}
DATA& CStudent :: GetAt(POSITION &pos)
{
    return *pos;
}
void CStudent:: InsertData(POSITION & pos,DATA &data)
{
    List.insert(pos, data);
}
void CStudent:: ShowNote()
{
   POSITION pos = List.begin();
    while (pos != List.end()) {
        cout << (*pos) .name <<endl;
        pos++;
    }
}
//
//  main.cpp
//  标准C++类库_list
//
//  Created by 张凯泽 on 17/3/27.
//  Copyright © 2017年 rytong_zkz. All rights reserved.
//

#include <iostream>
#include <list>
#include "CStudent.hpp"
using namespace std;
int main(int argc, const char * argv[]) {
    CStudent sc;
    DATA d1 = {"ios",23},d2={"python",32},d3={"C++",43},d4={"c",45},d5={"swift",3},d6={"java",4545};
    sc.AddHeader(d1);
    sc.AddHeader(d2);
    sc.AddHeader(d3);
    sc.AddTailer(d4);
    sc.AddTailer(d5);
    //sc.ShowNote();
    cout << "-------------" <<endl;
    POSITION pos = sc.GetTailPosition();
    while (pos != sc.GetHeadPosition()) {
        DATA & data = sc.GetAt(pos);
        if (data.age == 3) {
            //cout <<"姓名=" <<data.name<<endl;
           // sc.RemoveAt(pos);
            sc.InsertData(pos, d6);
        }
        //std:: cout << sc.GetPrev(pos).name <<std:: endl;
        sc.GetPrev(pos);
    }
    
    for (std::list<DATA> :: iterator i = sc.GetHeadPosition(); i != sc.GetTailPosition(); i++) {
        std:: cout << (*i).name << "=" << (*i).age <<"\n" <<std:: endl;
    }
    
    
    
    
    list<int>m_list1,m_list2;
    m_list1.push_front(12);
    m_list1.push_front(2);//头部插入
//    m_list1.push_front(4);
//    m_list1.push_back(82);
//    m_list1.push_back(8);
//    m_list1.push_back(44);
    m_list2.push_back(83);
    m_list2.push_back(28);//尾部插入
    //m_list.unique();
    //m_list.insert(<#const_iterator __p#>, <#value_type &&__x#>)
    m_list1.splice(m_list1.begin(), m_list2);//合并两个链表
    m_list1.sort();//对链表进行排序
    //cout << *(m_list.begin())<<endl;
    cout<<"listOne.begin()--- listOne.end():"<<endl;
    std::list<int> :: iterator i;
    for (i = m_list1.begin(); i != m_list1.end(); ++i)
        cout << *i << " ";
    cout << endl;
    
    return 0;
}

 

posted @ 2017-03-28 14:43  张凯泽  阅读(899)  评论(0编辑  收藏  举报