首页 > 代码库 > 关于c++ list容器的操作摸索

关于c++ list容器的操作摸索

#include<iostream>
#include<algorithm>
#include<list>
#include<iterator>
#include<cstdlib>
using namespace std;
struct n1
{
	string name;
	long long num;
};
list<n1>l;
void charu()
{
	n1 tmp;
	cin>>tmp.name>>tmp.num;
	if(tmp.num<l.front().num)
		l.push_front(tmp);
	else
		l.push_back(tmp);
}
void quanshan()
{
	l.clear();
}
string xs;
long long xi;
bool way(const n1 & a)
{
	if(xi==-1)
		return a.name==xs;
	else
		return a.num==xi;
}
void shanmingzi()
{
	xi=-1;
	cin>>xs;
	l.remove_if(way);
}
void shanxuehao()
{
	cin>>xi;
	l.remove_if(way);
}
void xianshi()
{
	list<n1>::iterator i;
	for(i=l.begin();i!=l.end();i++)
		cout<<i->name<<","<<i->num<<endl;
}
bool cmp(n1 a,n1 b)
{
	return a.num<b.num;
}
void shunxu()
{
	l.sort(cmp);
}
void daoxu()
{
	l.reverse();
}


bool same_integral_part (n1 a,n1 b)
{
	 return (a.name==b.name)&&(a.num==b.num); 
}

void xuanze()
{
	int j;
	cout<<"1.插入 2.删除 3.查看 4.排序"<<endl;
	cin>>j;
	if(j==1)
	{
		cout<<"输入名字,学号(例如,杜甫 123):"<<endl;
		charu(); 
	}
	else if(j==2)
	{
		cout<<"1.按名字删 2.按学号删 3.全删"<<endl;
		cin>>j;
		if(j==1)
			shanmingzi();
		else if(j==2)
			shanxuehao();
		else if(j==3)
			quanshan();
	}
	else if(j==3)
	{
		xianshi();
	}
	else if(j==4)
	{
		cout<<"1.顺序 2.倒序"<<endl;
		cin>>j;
		if(j==1)
			shunxu();
		else if(j==2)
			daoxu();
		cout<<"1.去重"<<endl;
		cin>>j;
		if(j==1)
			l.unique(same_integral_part); 
	}
}
int main()
{
	int j;
	while(1)
	{
		xuanze();
		cout<<"0.退出 1.返回选择界面"<<endl; 
		cin>>j;
		if(j==0)
			return 0;
		system("cls");
	}
}