【日常学习】【语法】STL之vector
来源:互联网 发布:新浪财经数据 编辑:程序博客网 时间:2024/05/21 23:32
本周四学习了vector 由于时间关系拖到现在才发总结
那么现在总结一些vector的常用用法
vector需要有一个名字 即数组名 因为vector本身就是一个不定长数组 我们以a为例 那么相当于建立了数组a[ ]但是没有给定长度
声明语法:
头文件vector
vector<int> a 这个句子的意思是,建立一个名字为a的不定长数组 基类型为整数型
vector<int> a[31] 这个句子的意思是,建立一个下标从0-30的数组 每个数组元素都又是一个不定长数组 基类型为整数型
请注意,在第二个句子中,相当于定义了一个二维数组 它的第一个坐标长度(可以视为行数)是确定的30行,但第二个坐标长度不确定,可以任意增删
如果写出了第二个句子 那么下面函数操作时以a[1]为例 应为a[1].size(),a[1].push_back(i)这样
常用函数:
a.size()读取数组大小 【一定要加括号】 读取的大小是实际大小 即:数组a[5],下标为a[0]-a[4] 该函数返回值为5
a.resize()改变数组大小 由于vector是不定长数组 a.resize(x)的意义是:保留下标【0-(x-1)】的元素 即长度为x的字符串
a.push_back()向数组尾部添加元素 没有元素的话就放在第一个位置
a.pop_back()删除最后一个元素
a.clear()清空a数组
a.empty()检查a数组是否为空
(这两个我还没用过)
vector可以直接赋值,也可以作为函数的参数,或返回值 但目前我还没有遇到过 所以不便多说
我接触到的第一个vector程序 是TY菌写的 单词翻转(codevs1205)大意是输入一个句子把她翻转 I love you就变成you love I这样
这只是一道非常简单的题目 但当时刚刚转为西家家的我却苦于读入
我写的程序改进版本是这样的
#include<iostream>#include<string>using namespace std;int main(){string a[500];string s;int i=0;while (cin>>s){a[i]=s;i++;} for (i=i-1;i>=0;i--){cout<<a[i]<<" ";}return 0;}
这是相当朴素的方法 这时候好人TY菌过来顺手写了个看起来更精妙的代码
#include<iostream>#include<vector>#include<string>using namespace std;main(){ string str; vector<string>a;//开一个字符串数组,名叫a while(cin>>str){//if str exist return 1 else return 0 a.push_back(str);//if it's not the first put it behind the last } for(int i=a.size()-1;i>=0;--i)cout<<a[i]<<" ";//output in the opposite way}我感到新奇有趣 于是仔细请教了每个句子什么意思 右边的注释就是我当时留下的 英文应该不难懂
思路很清晰简单 开一个vector a,每读入一个串(没用getline,用的是流读入,流读入和C标准读入都是读到空格,getline读到行末),就把它放到数组最后 最后倒序输出
写的第二个程序是ruka上的例题5-2 Uva101 - The Blocks Problem木块问题
题目要求模拟木块移动:
有n(0<n<25)快block,有5种操作:
move a onto b 在将a搬到b上之前,先把a和b上的积木放回原來的位置
move a over b在将a搬到b所在的那堆积木上前,先把a上的积木放回原來的位罝
pile a onto b 将包括a本身和上方的积木一起放到b上,在放之前b上方的积木放回原来的位置
pile a over b 将包括a本身和上放的积木一起搬到到b所在的那堆上
quit结束命令,前四个动作中若ab在同一堆中,则不做改变。
鄙人看了ruka上给出的代码 自己默了一遍 中途发现很大的坏处是不敢随便起函数名变量名 尤其是在同窗大神参加NOIP2014由于使用了link这个LINUX不允许的名字导致编译错误以五分只差错失一等后 痛心疾首 可我又是个英文空 平素甚恶汉语拼音变量名 于是只好效法ruka用这种据说程序员常用的复杂函数名TUT
代码放上
//vector#include<iostream>#include<vector>#include<string>using namespace std;const int maxn=30;int n;vector<int> p[maxn];void find_block(int x,int &px,int &hx){for (px=0;px<n;px++){for (hx=0;hx<p[px].size();hx++){if (p[px][hx]==x) return;}}}void size_clear(int px,int hx){for (int i=hx+1;i<p[px].size();i++){int b=p[px][i];p[b].push_back(b);}p[px].resize(hx+1);}void pile(int px,int hx,int p2){for (int i=hx;i<p[px].size();i++){p[p2].push_back(p[px][i]);}p[px].resize(hx);}void print(){ for (int i=0;i<n;i++){ cout<<i<<':'; for (int j=0;j<p[i].size();j++) cout<<' '<<p[i][j]; cout<<endl; }}int main(){cin>>n;int a,b;string s1,s2;for (int i=0;i<n;i++) p[i].push_back(i);while (cin>>s1>>a>>s2>>b){int pa,pb,ha,hb;find_block(a,pa,ha);find_block(b,pb,hb);if (pa==pb) continue;if (s2=="onto") size_clear(pb,hb);if (s1=="move") size_clear(pa,ha);pile(pa,ha,pb);}print();return 0;}
这个代码非常好的一点是 通过分析关系减少了函数的编写和使用量 简洁明了
还有这一点
void find_block(int x,int &px,int &hx){for (px=0;px<n;px++){for (hx=0;hx<p[px].size();hx++){if (p[px][hx]==x) return;}}}
px和hx两个变量是在主函数中定义的 定义之后没有复制 竟然直接用了 仔细一看原来函数参数传递时用了引用 引用这个东西有点像Pas里的变量形参 具体有什么区别我还不了解 据里奥同志说 他通常使用指针(貌似纯属个人喜好,此大牛非常喜欢指针啊类啊构造器啊一类蒟蒻望而却步的东西) 他还表示指针是引用的父亲 怎么能没有指针呢?引用的底层就是指针 但是引用更快一些
在这个程序段里 引用的好处在于不需要费劲的传递参数 在寻找行列位置的时候 我们所需要的主函数中的px和hx在不断被赋值 当他们找到正确的值 直接退出 这样经历了一个程序 两个变量在寻找过程中已经被赋值了 我深深惊叹于这一点
收到结果 POJ1208和Uva101都AC了 我很高兴 这是我在POJ上除了a+b 以外A的第一道题O(∩_∩)O~
————————————————以下是题外话————————————————————
昨天发棒棒糖了 收获了八个 包括全套彩虹 彩虹是留给阳阳的 其他两根预备自己吃掉
放假倒计时5天
——我觉山高,潭空水冷,月明星淡。
- 【日常学习】【语法】STL之vector
- 【日常学习】【语法】STL之sort
- 【日常学习】【语法】STL之set
- STL学习之vector
- STL学习之Vector
- STL学习之vector
- STL之vector学习
- STL学习之vector
- STL学习之vector
- 【日常学习】STL之map
- STL学习之vector容器
- [转载]STL学习之Vector
- STL之vector学习笔记
- STL学习之vector(1)
- 初学者学习C++STL之vector容器
- STL学习之vector与deque
- STL学习之路三(vector)
- 【STL】STL容器之vector
- 最近我的邮箱里总有这种信息
- 栈的使用
- Technologies to be learned
- Leetcode NO.63 Unique Paths II
- 《设计模式之禅》笔记汇总
- 【日常学习】【语法】STL之vector
- 一切成功源于积累——20150207 美国非农5分钟k线直至收盘 各货币对表现
- 【mfc】使用系统文件对话框打开文件与保存文件、利用StdAfx.h设置全局变量
- Try
- 读《给你90天 成为不一样的自己》有感
- 直接拿来用!十大Material Design开源项目
- Linux3.6.7在OK6410平台的移植TS
- Slang俚语[slæŋ]
- 高等数学(总结7--解析向量空间)