C++ 头歌实训 面向对象 - STL 的应用

第一关

在结构体中要重载<才能使用sort进行排序,erase函数返回的是删除元素的下一个位置;

#include 
#include 
#include 
#include 
using namespace std;

/********* Begin *********/
//自定义的类和者其他内容
struct student {
	string name;
	int socre;
	student(string n, int s) {
		name = n; 
		socre = s;
	}
	bool operator<(const student& st) {
		return socre > st.socre;
	}
};


/********* End *********/

int main()
{
	/********* Begin *********/
	//读取输入数据,执行动作
	vector stu;
	char key;
	
	while (cin >> key) {
		
		switch (key)
		{
		case 'A': {
			string n;
			int s;
			cin >> n >> s;
			
			bool flag=true;
			for (vector::iterator it = stu.begin(); it != stu.end(); it++) {
				if(it->name==n){
					it->socre=s;
					flag=false;
					break;
				}
			}
			if(flag){
				student t1(n, s);
				stu.push_back(t1);
			}
			
			break;
		}
			
		case 'P': {
			vector::iterator it = stu.begin();
			if (it == stu.end()) {
				cout << "[空]"<::iterator it = stu.begin(); it != stu.end(); it++) {
				cout << it->name << " " << it->socre << endl;
			}
			break;
		}
			
		case'R':
		{
			string n;
			cin >> n;
			for (vector::iterator it = stu.begin(); it != stu.end(); ) {
				if (it->name == n) {
					it=stu.erase(it,it+1);
				}
				else {
					it++;
				}
			}
			
			break;
		}
		case 'S':
		{
			sort(stu.begin(), stu.end());
			break;
		}
		default:
			break;
		}
	

	}

	return 0;

	/********* End *********/
}

第二关

解题思路已经在注释中了,大家可以参照注释进行理解

#include 
#include 
#include 
using namespace std;

int main()
{
	/********* Begin *********/
	//读取输入,解析并输出复原后的输出
	char n[1000];
	while(cin>>n){
		
	list l(10, '0');//先初始化,好用指针,后面再将0删除
	
	list::iterator it = l.begin();
	int flag = 0;//记录功能键
	int count = 0;//记录容器中数据个数
	for (int i = 0; i < 1000; i++) {
		if (n[i] == '\0') {
			break;
		}
		//判断功能
		if (n[i] == '<') {
			flag = 1;
			
		}
		else if (n[i] == '>') {
			flag = 2;
			
		}
		else if (n[i] == '[') {
			flag = 3;
			
		}
		else if (n[i] == ']') {
			flag = 4;
			//continue;
		}
		else {
			count++;
		}
		//根据功能输入
		switch (flag) {
		case 0: {
			*it = n[i];
			it++;
			break;
		}
		case 1:
		{
			//判断是否行使功能
			if (n[i] != '<') {
				l.insert(it, n[i]);
			}
			else {
				if(it!=l.begin()){//在最开头就左移不了
					it--;
				}
				
			}
			break;
		}
		case 2:
		{
			if (n[i] != '>') {
				l.insert(it, n[i]);
			}
			else {
				if(*it!='0'){//假如此时指向的不是0,则可以向右移动
					it++;
				}
			}
			break;
		}
		case 3:
		{
			if (n[i] == '[') {
				it = l.begin();
			}
			else {
				l.insert(it, n[i]);
			}
			break;
		}
		case 4:
		{
			if (n[i] == ']') {//找到第一个0
				for (it = l.begin(); it != l.end();it++) {
					if(*it=='0'){
						break;
					}
				}
				
			}
			else {
				l.insert(it, n[i]);
			}
			break;
		}
		}
	}

	//把list中0 清除
	for (it = l.begin(); it != l.end();) {
		if(*it=='0'){
			it=l.erase(it);
		}else{
			it++;
		}
	}
	//把list中的元素一一输出
	for (it = l.begin(); it != l.end(); it++) {
		cout << *it;
	}
	cout << endl;
	}
	return 0;


	/********* End *********/
}

你可能感兴趣的:(头歌c++程序设计,c++)