STL sector 应用

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <cstdio>
 5 using namespace std;
 6 int n;
 7 vector<int> pile[30];
 8
 9 //找到a所在pile和height,以应用的形式返回调用者,
10 void find_block(int a,int &p,int &h)
11 {
12     for(p=0;p<n;p++)
13         for(h=0;h<pile[p].size();h++)
14             if(pile[p][h]==a)
15     return ;
16 }
17
18 void clear_above(int p,int h)
19 {
20     for(int i=h+1;i<pile[p].size();i++)
21     {
22         int b=pile[p][i];
23         pile[b].push_back(b);
24     }
25     pile[p].resize(h+1);
26 }
27 void pile_onto(int p,int h,int p2)
28 {
29     for(int i=h;i<pile[p].size();i++) //pile[p].size()的容量大小
30         pile[p2].push_back(pile[p][i]);
31     pile[p].resize(h);//pile[p]的容量改成h大小
32 }
33 void print()
34 {
35     for(int i=0;i<n;i++)
36     {
37         printf("%d:",i);
38         for(int j=0;j<pile[i].size();j++)
39             printf(" %d",pile[i][j]);
40         printf("\n");
41     }
42 }
43
44
45 int main()
46 {
47     int a,b;
48     scanf("%d",&n);
49     string s1,s2;
50     for(int i=0;i<n;i++)
51         pile[i].push_back(i);
52     while(cin>>s1>>a>>s2>>b)
53     {
54         int pa,pb,ha,hb;
55         find_block(a,pa,ha);
56         find_block(b,pb,hb);
57         if(pa==pb)
58             continue;
59         if(s2=="onto")  clear_above(pb,hb);
60         if(s1=="move")  clear_above(pa,ha);
61         pile_onto(pa,ha,pb);
62         print();
63     }
64
65     return 0;
66 }
vector类:

pile[p].size()看容量大小

pile[p].resize(n)调整vector容器的大小

pile[p].empty() 判断是否为空
begin()和end()函数--返回第一个元素和最后一个元素位置

front()和back()函数返回vector 中第一个元素和最后一个元素

push_back(x)和pop_back()在vector中最后插入一个元素和删除一个元素

vector 可以和数组一样,用下表表示
 
时间: 2024-10-14 06:02:10

STL sector 应用的相关文章

STL学习思想

1.模版:一定要注意参数和返回值的模版 2.STL一系列的API:一定要注意返回值 3.容器中的都是值拷贝,而不是引用,在执行插入时,内部实行拷贝动作,所以STL中插入类时,一般都必须:无参构造函数,拷贝构造函数,重载=运算符,必须的自己重写,达到深拷贝!!! 4.一元谓词:函数只有一个参数,谓词:代表函数的返回值必须为bool类型;   二元谓词:函数只有二个参数,谓词:代表函数的返回值必须为bool类型; 5.算法和具体的数据类型相分离:通过函数对象(仿函数)来实现,本质:函数指针!!! 6

C++ STL学习——vector

学过C++的人肯定会很熟悉STL标准模板库,STL其实就是封装了一系列的接口,供我们调用.很多函数或者算法的实现不需要我们从头开始写,大大提高我们的编程效率.这篇博客在简单介绍STL的情况下,会详细的来介绍vector的使用. STL共有六大组件: 一.容器(Container):是一种数据结构,如list,vector,deque,queue等,以模板类的方法提供,为了访问容器中的数据,可以使用由容器类提供的迭代器. 二.迭代器(Iterator):提供了访问容器中对象的方法. 三.算法(Al

C++ STL中Map的按Key排序和按Value排序

原文  http://blog.csdn.net/iicy266/article/details/11906189 map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择. 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key:该学生的成绩用int类型,作为value.这样一来,我们可以根据学

stl容器区别: vector list deque set map及底层实现

在STL中基本容器有: vector.list.deque.set.map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set :集合, 用来判断某一个元素是不是在一个组里面,使用的比较少 map :映射,相当于字典 ,把一个值映射成另一个值,如果想创建字典的话使用它好了 底层采用的是树型结构,多数使用平衡二叉树实现 ,查找某一值是常数时间,遍历起来效果也不错, 只是每次插入值的时候,会重新构成底层的平衡二叉树,效率有一定影响. vector.list.dequ

STL vector,deque,list

一.vector可变长的动态数组必须包含头文件 #include <vector>支持随机访问迭代器• 根据下标随机访问某个元素时间为常数• 在尾部添加速度很快• 在中间插入慢所有STL算法 都能对vector操作 构造函数初始化:vector();无参构造函数, 将容器初始化成空的vector(int n);将容器初始化成有n个元素vector(int n, const T & val);假定元素类型是T, 将容器初始化成有n个元素, 每个元素的值都是valvector(iterat

C++ STL hash_map的使用以及STL hash_map的大“坑”

计算机编程中经常会用到hash表,而在C++中,使用STL编程更是少不了的.本文将介绍STL中hash_map的使用.在hash_map中使用自定义类型作为key值的方法以及在使用char *类型作为key值时遇到的问题. 一.需要的头文件以及命名空间 在linux下使用STL hash_map除了需要引用其所在头文件<hash_map>之外还要引用其命名空间.像这样写  1 using namespace __gnu_cxx; 二.hash_map的定义 先来看看hash_map是怎么定义的

c++ STL容器初探

什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种"对象"还包含了一系列处理"其它对象"的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是"容器类是一种对特定代码重用问题的良好的解决方案". 容器还有另一个特点是容器可以自行扩展.在解决问题时

stl源码剖析 详细学习笔记 算法总览

//****************************基本算法***************************** /* stl算法总览,不在stl标准规格的sgi专属算法,都以 *加以标记 算法名称              算法用途         质变                   所在文件 accumulate          元素累计            否                   <stl_numeric.h> adjacent_differenc

stl源码剖析 详细学习笔记 算法(1)

//---------------------------15/03/27---------------------------- //算法 { /* 质变算法:会改变操作对象之值 所有的stl算法都作用在由迭代器[first,last)所标示出来的区间上.质变算法 就是 运算过程会更改区间内的元素内容 非质变算法:和质变算法相反 */ /* stl算法的一般形式 1>所有的泛型算法的前两个参数都是一对迭代器,通常称为first和last,用以标示算法的操作区间 2>stl习惯采用前闭后开区间