UVA 101 vector
白书上的例题,关于vector的使用。不定长数组vector,类型内部封装了一些常用操作。vector就像一个二维数组,只有第一维的大小是固定的,可以像数组一样访问到其中的每一个元素。
vector<int> v; 常用操作 v.size(); v.clear();清空 v.resize();改变大小 v.push_back();在尾部添加元素 v.pop_back();在尾部删除元素 v.empty();检测是否为空
vector之间可直接赋值或作为函数的返回值,像是“一等公民”一样。
注意事项:1.读题时提取指令间的共同点,减少重复代码。 2.代码中用到引用
find_block(a,pa,ha);
void find_block(int a ,int& p ,int& h ) {
for(int p = ; p < n; p++) {
for(int h = ; h < pile[p].size() ; h++) {
if(pile[p][h]==a) return;
}
}
}
#include<iostream>
#include<cstdio>
#include<vector>
#include<string>
using namespace std;
#define MAXN 30
int n;
string s1,s2;
vector<int> pile[MAXN]; //以引用的形式返回调用者
void find_block(int a ,int& p ,int& h ) {
for(p = ; p < n; p++) {
for(h = ; h < pile[p].size() ; h++) {
if(pile[p][h]==a) return;
}
}
} void clear_above(int p,int h) {
for(int i = h+;i < pile[p].size();i++) {
int k = pile[p][i];
pile[k].push_back(k);
}
pile[p].resize(h+);
} //把第p堆高度为h及其上方的木块整体移动到p2堆顶部
void pile_onto(int p,int h,int p2) {
for(int i=h;i<pile[p].size();i++) {
pile[p2].push_back(pile[p][i]);
}
pile[p].resize(h); }
int main() {
int a,b;
while(cin>>n) {
for(int i=;i<n;i++) {
pile[i].push_back(i);
}
int pa,ha,pb,hb;
while(cin>>s1) { if(s1=="quit") break;
cin>>a>>s2>>b;
find_block(a,pa,ha);
find_block(b,pb,hb);
if(pa==pb) continue; if(s2=="onto") {
clear_above(pb,hb);
}
if(s1=="move") {
clear_above(pa,ha);
}
pile_onto(pa,ha,pb);
} for(int i=;i<n;i++) {
printf("%d:",i);
for(int j=;j<pile[i].size();j++) {
printf(" %d",pile[i][j]);
}
printf("\n");
}
} return ;
}
Vector成员函数
函数 |
表述 |
c.assign(beg,end) c.assign(n,elem) |
将[beg; end)区间中的数据赋值给c。 将n个elem的拷贝赋值给c。 |
c.at(idx) |
传回索引idx所指的数据,如果idx越界,抛出out_of_range。 |
c.back() |
传回最后一个数据,不检查这个数据是否存在。 |
c.begin() |
传回迭代器重的可一个数据。 |
c.capacity() |
返回容器中数据个数。 |
c.clear() |
移除容器中所有数据。 |
c.empty() |
判断容器是否为空。 |
c.end() |
指向迭代器中的最后一个数据地址。 |
c.erase(pos) c.erase(beg,end) |
删除pos位置的数据,传回下一个数据的位置。 删除[beg,end)区间的数据,传回下一个数据的位置。 |
c.front() |
传回第一个数据。 |
get_allocator |
使用构造函数返回一个拷贝。 |
c.insert(pos,elem) c.insert(pos,n,elem) c.insert(pos,beg,end) |
在pos位置插入一个elem拷贝,传回新数据位置。 在pos位置插入n个elem数据。无返回值。 在pos位置插入在[beg,end)区间的数据。无返回值。 |
c.max_size() |
返回容器中最大数据的数量。 |
c.pop_back() |
删除最后一个数据。 |
c.push_back(elem) |
在尾部加入一个数据。 |
c.rbegin() |
传回一个逆向队列的第一个数据。 |
c.rend() |
传回一个逆向队列的最后一个数据的下一个位置。 |
c.resize(num) |
重新指定队列的长度。 |
c.reserve() |
保留适当的容量。 |
c.size() |
返回容器中实际数据的个数。 |
c1.swap(c2) swap(c1,c2) |
将c1和c2元素互换。 同上操作。 |
vector<Elem> c vector <Elem> c1(c2) vector <Elem> c(n) vector <Elem> c(n, elem) vector <Elem> c(beg,end) c.~ vector <Elem>() |
创建一个空的vector。 复制一个vector。 创建一个vector,含有n个数据,数据均已缺省构造产生。 创建一个含有n个elem拷贝的vector。 创建一个以[beg;end)区间的vector。 销毁所有数据,释放内存。 |
UVA 101 vector的更多相关文章
- UVa 101 The Blocks Problem Vector基本操作
UVa 101 The Blocks Problem 一道纯模拟题 The Problem The problem is to parse a series of commands that inst ...
- 木块问题(The Blocks Problem,Uva 101)
不定长数组:vector vector就是一个不定长数组.不仅如此,它把一些常用操作“封装”在了vector类型内部. 例如,若a是一个vector,可以用a.size( )读取它的大小,a.resi ...
- Uva 101 -- the block problem
Uva 101 the block problem 题目大意: 输入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置.现对这些木块进行操作,操作分为四种. 1.move a o ...
- uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟
挺水的模拟题,刚开始题目看错了,poj竟然过了...无奈.uva果断wa了 搞清题目意思后改了一下,过了uva. 题目要求模拟木块移动: 有n(0<n<25)快block,有5种操作: m ...
- 【UVA - 101】The Blocks Problem(vector+模拟)
The Blocks Problem Descriptions:(英语就不说了,直接上翻译吧) 初始时从左到右有n个木块,编号为0~n-1,要求实现下列四种操作: move a onto b: 把a和 ...
- UVA 11991 vector
Though Rujia Liu usually sets hard problems for contests (for example, regional contests likeXi’an 2 ...
- UVA 101
题意:四种操作把a和b所在的数字移动. lrj的思想很好.首先找到共同点.然后不必写四种操作.其次理解vector的方便. #include<iostream> #include<c ...
- UVa 101 - The Blocks Problem(积木问题,指令操作)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- UVa 101 The Blocks Problem
题意:给出从左到右放置的n块木块(从0开始编号),再给出四种操作,再给出相应的操作,输出操作结束后每一堆木块的情况. 学习的紫书,因为每一堆的木块数是在发生变化的,所以用vector. 然后就是模拟几 ...
随机推荐
- leetcode第一刷_Binary Tree Zigzag Level Order Traversal
以出现的频率来看.树的层序遍历一定是考察的重点,除非工作人员想找题水数量. zigzag,还是有几道题的,层序的这个非常easy,假设是奇数层.reverse下面就可以.无他.我写的时候预计还不知道这 ...
- poj3411--Paid Roads(bfs+状压)
题目链接:id=3411">点击打开链接 题目大意:有n个点.m条有向边,经过边须要一个花费,a b c p q代表 a到b的一条道路,假设经过这条边之前经过c点,那么须要p的花费,否 ...
- 简易web服务器(java版)
//直接使用 ServerSocket 监听服务器端口,就能实现web服务器package ThreadPoolTest; import java.io.InputStream; import jav ...
- tomcat7与tomcat6引入标签taglib的区别:taglib definition not consistent with specification version
org.apache.tomcat.util.digester.Digester startElement严重: Begin event threw exceptionjava.lang.Illega ...
- Android学生管理系统
现在要做这么一个小的demo,可以添加.展示,并且在添加完了之后刷新列表内容. 要点: 在代码中给线性布局添加View 让控件滚动,放到ScrollView中 保存数据就是把数据保存到本地,然后恢复的 ...
- MySql 数据库系列问题
0. 我的MYSQL学习心得(四) 数据类型(系列文章) 1.MySql数据库学习--存储过程(1) 0.[转]MySQL存储过程调试工具-dbForge Studio for MySQL ①.存储过 ...
- 集合第七发练习之利用ArrayList做栈、队列
栈:后进先出. 队列:先进先出. 利用这个核心思想,结合集合的add和remove方法做的栈和队列如下代码所示: 主类(t1()和t2()分别演栈和队列): package cn.hncu.myS ...
- Android开发 adb命令提示:Permission denied (转)
如题:模拟器版本->android 7.1.1 遇到这样的情况把模拟器root一下就好了:su root =============2017年4月3日20:57:33============== ...
- cocos2d-x 2.x 支持多个方向屏幕翻转
主要改动 RootViewController.mm 的 supportedInterfaceOrientations 方法 1.四个方向 UIInterfaceOrientationMaskAll ...
- 将navigationbar的translucent属性设为No后,子控制器视图整体下移问题
如果不将navigationbar.translucent = YES 会觉得颜色很浅,因为这是半透明状态 若navigationbar.translucent = NO,颜色问题解决,但是子控制器视 ...