1. vector的初始化

2. vector基本操作

2.1 vector属性

  1. size
  1. resize

2.2 vector操作

  • 插入

    在最后插入一个元素
  1. push_back()
  • 删除

    在最后删除一个元素
  1. pop_back()

uva 101 木块问题

题目大意

输入n,得到编号为0n-1的木块,分别摆放在顺序排列编号为0n-1的位置。现对这些木块进行操作,操作分为四种。

  1. move a onto b:把木块a、b上的木块放回各自的原位,再把a放到b上;
  2. move a over b:把a上的木块放回各自的原位,再把a发到含b的堆上;
  3. pile a onto b:把b上的木块放回各自的原位,再把a连同a上的木块移到b上;
  4. pile a over b:把a连同a上木块移到含b的堆上。

    当输入quit时,结束操作并输出0~n-1的位置上的木块情况

Sample Input

10

move 9 onto 1

move 8 over 1

move 7 over 1

move 6 over 1

pile 8 over 6

pile 8 over 5

move 2 over 1

move 4 over 9

quit

Sample Output

0: 0

1: 1 9 2 4

2:

3: 3

4:

5: 5 8 7 6

6:

7:

8:

9:

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<string>
  5. #include<iostream>
  6. using namespace std;
  7. /*
  8. move a onto b:把a和b上方的木块全部归位,然后把a放到b上方
  9. move a over b:把a上方的木块全部归位,然后把a放到b木块所在的顶部
  10. pile a onto b:把b上方的木块全部归位,然后把a及以上的木块整体放到b上面。
  11. pile a over b:把a和a以上的木块全部放到b所在的木块堆的顶部。
  12. */
  13. const int MAXC=30;
  14. int n;
  15. vector<int> pile[MAXC];
  16. //用来查找a具体在哪个堆的,要得到两个数据,堆和高度
  17. void find_block(int a,int& i,int& j){
  18. for(i=0;i<n;i++){
  19. for(j=0;j<pile[i].size();j++){
  20. if(pile[i][j] == a)
  21. return;
  22. }
  23. }
  24. }
  25. //清除p堆,将h层以上的木块进行归位
  26. void clear_above(int p,int h){
  27. for(int i=h+1;i<pile[p].size();i++){
  28. int k=pile[p][i];
  29. pile[k].push_back(k);
  30. }
  31. pile[p].resize(h+1);
  32. }
  33. //把第p堆高度为h及以上的木块全部堆到第p2堆的顶部
  34. void pileon(int p,int h,int p2){
  35. for(int i=h;i<pile[p].size();i++){
  36. pile[p2].push_back(pile[p][i]);
  37. }
  38. pile[p].resize(h);
  39. }
  40. //打印出所有的木块
  41. void print(){
  42. for(int i=0;i<n;i++){
  43. printf("%d:",i);
  44. for(int j=0;j<pile[i].size();j++){
  45. printf(" %d",pile[i][j]);
  46. }
  47. printf("\n");
  48. }
  49. }
  50. int main()
  51. {
  52. cin>>n;
  53. for(int i=0;i<n;i++)pile[i].push_back(i);
  54. string s1,s2;
  55. int a,b;
  56. while(cin>>s1){
  57. if(s1 =="quit") break;
  58. cin>>a>>s2>>b;
  59. int pa,ha;//a所在的堆和高度
  60. int pb,hb;//b所在的堆和高度
  61. find_block(a,pa,ha);
  62. find_block(b,pb,hb);
  63. if(pa == pb) continue; //非法指令
  64. if(s2 == "onto") clear_above(pb,hb);//有onto就要把b上方的木块移掉
  65. if(s1 == "move") clear_above(pa,ha);
  66. pileon(pa,ha,pb);
  67. }
  68. print();
  69. return 0;
  70. }

C++ vector用法积累的更多相关文章

  1. #include <vector>用法之我见

    vector是一种顺序容器,事实上和数组差不多,但它比数组更优越.一般来说数组不能动态拓展,(何为动态拓展,即是说如果你知道你要存的数据的个数,你定义的存储数据的数组大小也就决定了,但是若你事先不知道 ...

  2. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  3. C++-STL:vector用法总结

    目录 简介 用法 1. 头文件 2. vector的声明及初始化 3. vector基本操作 简介 vector,是同一类型的对象的集合,这一集合可看作可变大小的数组,是顺序容器的一种.相比于数组,应 ...

  4. C++ STL之vector用法总结

    介绍 vector是表示可变大小数组的序列容器. 就像数组一样,vector也采用的连续存储空间来存储元素.也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效.但是又不像数组,它的大 ...

  5. vector用法总结(转载)

    一.vector的基本概念 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包 ...

  6. STL源代码学习--vector用法汇总

    一.容器vector 使用vector你必须包含头文件<vector>: #include<vector> 型别vector是一个定义于namespace std内的templ ...

  7. map set vector用法小总结

    1.Map 定义 #include<map> map<string,bool> mp; 插入 mp[s]=; mp.insert(make_pair(s,)); 输出 cout ...

  8. c++ vector用法详解

    1. 定义: 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)可以认为是一个动态数组,其中一个vector中的所有对象都必须是同一种类型的. 2. 构造函 ...

  9. C++中的vector 用法解析

         一.概述     vector 是C++标准模板库的部分内容,他是一个多功能的,能够操作多种 数据结构和算法 的模板类和函数库.     vector 是一个容器,它能够存放各种类型的对象, ...

随机推荐

  1. ASP.NET生命周期详解(转)

    看到好文章需要分享. 最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多 ...

  2. select支持多查询,获取分页count

    在我们使用mybatis 时,当我们根据分页去查询数据集时,需要传入的参数有page(页码)和size(每页的条数),而我们期望获取到的数据有,小于或等于size的list数据集,同时我们还需要得到一 ...

  3. java面试题全集(上)--java基础

    本文转载自:https://blog.csdn.net/jackfrued/article/details/44921941 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - ...

  4. jQuery Event.stopImmediatePropagation() 函数详解

    stopImmediatePropagation()函数用于阻止剩余的事件处理函数的执行,并防止当前事件在DOM树上冒泡. 根据DOM事件流机制,在元素上触发的大多数事件都会冒泡传递到该元素的所有祖辈 ...

  5. liunx增强命令

    查找命令 grep 格式:grep [option] pattern [file] 实例: ps -ef | grep sshd 查找指定 ssh 服务进程 ps -ef | grep sshd | ...

  6. ring0 恢复SSDTHook

    原理: 用ZwQuerySystemInformation 功能号为11(SystemModuleInformation)  得到所有系统模块的地址 遍历搜索得到ntos模块的基地址 读Ntos模块到 ...

  7. windows10 、eclipse kepler配置maven环境

    maven环境的配置需要先配置Java环境. 一.在wIn10 中配置maven环境,需要先下载maven压缩包,官网http://maven.apache.org/download.cgi,我选择下 ...

  8. PS软件怎么把视频转成gif动态图?

    PS软件怎么把视频转成gif动态图?Adobe PhotoShop软件的最新版本是可以编辑视频的,并且可以将视频转换为GIF动态图,使用也很简单,下面分享ps制作gif动态图的教程,需要的朋友可以参考 ...

  9. Jmeter入门17 获取时间点前后一定间隔的时间 __timeShift()

    接口获取时间点前后一定间隔的时间函数: __timeShift(时间格式, 特定时间点(缺省当前时间),时间间隔,地区格式(默认),变量名( 可不填,填写后其他地方用${变量名}引用 )) 举例: 1 ...

  10. linux下修改apt下载源

    很多时候使用apt install命令会出现Unable to fetch somearchives的错误,我们需要运行以下apt update,可是经常会出现下载速度很慢的情况 这里就记一下将apt ...