对STL中的list进一步学习,编程过程中对结构体的操作很多。
全部代码如下:
/*
Project:list对结构体的使用
Date: 2018/07/14
Author: Frank Yu
常用函数:int size() 返回容器元素个数;bool empty() 判断容器是否为空,true为空;
增加函数:void push_back(元素) 尾元素后增加一个元素;push_front(元素) 首元素前增加一个元素;
iterator insert(lit,元素)在迭代器指针lit前插入元素,返回插入元素的迭代器指针;
void insert(lit,n,元素)在迭代器指针lit前插入n个相同元素;
void insert(lit,first,last) 把[first,last)间的元素插入lit前;
删除函数:void pop_back()删除容器尾元素,当且仅当容器不为空; 需判断,否则报错decrementable
void pop_front()删除容器首元素,当且仅当容器不为空;需判断,否则报错decrementable
void remove(元素)删除所有等于参数的元素;void clear()删除所有元素
iterator erase(lit)删除lit指向的元素,并返回下一指针
遍历函数:iterator begin() 返回首元素迭代器指针;iterator end() 返回尾元素迭代器指针
reverse_iterator rbegin() 返回尾元素的逆向迭代器指针;reverse_iterator rend() 返回首元素前的逆向迭代器指针
reference front()返回首元素;reference back()返回尾元素
排序函数:void sort()默认升序;void sort(Pred pr)按预判定函数排序;
其他函数:void swap(list & str) 两个list容器交换;void unique() 相邻元素重复,保留一个;
void splice(iterator lit,list &x) list x的所有元素插入lit前,x变为空
void splice(iterator lit,list &x,iterator first) list x的[first,end)间所有元素移走,插入lit前,x变为空
void splice(iterator lit,list &x,iterator first,iterator last) list x的[first,last)的所有元素移走,插入lit前,x变为空
void reverse()反转容器元素顺序
void unique()重复的相邻元素仅保留一个,需要排序,比较鸡肋
void Merge(list<元素>)合并函数,用于两个list容器,是数据移动不是复制,有set,显得也比较鸡肋
本程序使用了push_back()、push_front()、insert()、pop_back()、pop_front()、remove()、erase()、clear()
begin()、end()、rbegin()、rend()、front()、end()、sort()等函数
基本实现了list容器对结构体的增加、删除、查看、排序功能
*/
#include<iostream>
#include<list>
#include<string>
#include<iterator>
#include<algorithm>
using namespace std;
//变量及、初始化、重载***********************************************************************************
typedef struct node//学生结构体
{
int sno;//学生学号
string sname;//学生姓名
double sgrade;//学生成绩
}Student;
list<Student> s;
list<Student>::iterator lit;
list<Student>::reverse_iterator rlit;
bool operator ==(const Student &stu1,const Student &stu2)//重载 == ,注意要用const类型
{
bool flag=false;
if(stu1.sno==stu2.sno&&stu1.sname==stu2.sname&&stu1.sgrade==stu2.sgrade)flag=true;
return flag;
}
//菜单***********************************************************************************
void menu()//总菜单
{
cout<<"*************1.增加学生 2.删除学生*************"<<endl;
cout<<"*************3.排序 4.显示第一个***********"<<endl;
cout<<"*************5.显示最后一个 6.显示全部*************"<<endl;
cout<<"*************7.退出"<<endl;
}
void men