STL编程题2(C++程序设计第8周)
2016-01-07 00:10
417 查看
问题描述
写一个程序完成以下命令:
new id ——新建一个指定编号为id的序列(id<10000)
add id num——向编号为id的序列加入整数num
merge id1 id2——合并序列id1和id2中的数,并将id2清空
unique id——去掉序列id中重复的元素
out id ——从小到大输出编号为id的序列中的元素,以空格隔开
输入
第一行一个数n,表示有多少个命令( n<=200000)。以后n行每行一个命令。
输出
按题目要求输出。
样例输入
样例输出
提示
注意输出字符与字符之间是有空格的。
大家也可以看一下这里(https://zmy.im/archives/2015/08/88.html)的代码,方法略有不同,思路更加开阔。
源码
写一个程序完成以下命令:
new id ——新建一个指定编号为id的序列(id<10000)
add id num——向编号为id的序列加入整数num
merge id1 id2——合并序列id1和id2中的数,并将id2清空
unique id——去掉序列id中重复的元素
out id ——从小到大输出编号为id的序列中的元素,以空格隔开
输入
第一行一个数n,表示有多少个命令( n<=200000)。以后n行每行一个命令。
输出
按题目要求输出。
样例输入
16 new 1 new 2 add 1 1 add 1 2 add 1 3 add 2 1 add 2 2 add 2 3 add 2 4 out 1 out 2 merge 1 2 out 1 out 2 unique 1 out 1
样例输出
1 2 3 1 2 3 4 1 1 2 2 3 3 4 1 2 3 4
提示
注意输出字符与字符之间是有空格的。
大家也可以看一下这里(https://zmy.im/archives/2015/08/88.html)的代码,方法略有不同,思路更加开阔。
源码
#include <iostream> #include <iterator> #include <list>//双向链表 #include <vector> #include <string> using namespace std; //介绍个网站,大家可以直接在cppconferce上查一些C++的相关资料,比如list等。至于这里为什么要用list呢? //list的特点是支持任意位置的插入删除操作,另外其:unique和merge(或splice)函数在是非常适合这道题使用的。 /* 返回l中第id个list<int> */ list<int>& FindList(vector<list<int> >& l, int id) { int tmp = l.size(); // if (tmp > 0) // { vector<list<int> >::iterator i; i = l.begin(); return *(i + id - 1); // } } int main() { int n; cin >> n; vector<list<int> > a; for (int i = 0; i < n; i++) { string s; cin >> s; if (s == "new") { int id; cin >> id; a.push_back(list<int>()); } else if(s == "add") { int id, num; cin >> id >> num; list<int>& temp = FindList(a, id); temp.push_back(num); temp.sort();//将list中的元素按“<”规定的比较方法升序排列。list还有其他的sort成员函数 } else if (s == "merge") { int id1, id2; cin >> id1 >> id2; list<int>& temp1 = FindList(a, id1); list<int>& temp2 = FindList(a, id2); temp1.sort(); temp2.sort(); temp1.merge(temp2); } else if (s == "unique") { int id; cin >> id; list<int>& temp = FindList(a, id); temp.sort(); temp.unique(); } else if (s == "out") { int id; cin >> id; list<int>& temp =FindList(a, id); temp.sort(); if (temp.size() > 0) { list<int>::iterator i; for (i = temp.begin(); i != temp.end(); i++) { cout << *i << " "; } } cout << endl; } } return 0; }
相关文章推荐
- c++ 简易文件读写操作
- C语言:巧用杨辉三角求二项展开式的系数
- 本程序演示了C语言中回调函数的使用方法
- 图的表示方法和C++实现
- C++ 排序函数 sort(),qsort()的用法 / 同时可以学习回调函数
- C++中qsort排序方法 / 同时可以学习回调函数
- #ifdef DEBUG的理解
- C++ 覆盖和隐藏
- 在OC语言中整形数组直接封装变成字符的快速写法
- C语言学习笔记1:static
- 一起talk C栗子吧(第九十 一回:C语言实例--数组的大小)
- Sicily 1218. 纪念邮票
- 仿函数应用详解
- 将一个数组中的值按逆序重新存放并输出
- 个人学习c++的真实经验
- face++ c++接口 以及 curl 库的使用,json库在另一个博客介绍
- 【C/C++学院】0830-兰不达表达式/STL算法-操作数据
- C++ 输入与输出的学习
- C++ 中的条件语句
- C语言基础总结-++ -- += -=