vector初始化,resize(),紫皮书木块问题
2020-04-02 18:36
986 查看
vector初始化,resize(),紫皮书木块问题。
如何利用vector构造杨辉三角
class Solution { public: vector<vector<int>> generate(int numRows) { vector<vector<int>> ret(numRows);(给定一个) for(int i=0;i<numRows;i++) { ret[i]=vector<int>(i+1,0); ret[i][0]=1; ret[i][i]=1; } if(numRows==2)return ret; for(int i=1;i<numRows;i++) for (int j = 1; j < ret[i].size()-1; ++j) ret[i][j]=ret[i-1][j-1]+ret[i-1][j]; return ret; } };
这里总结一些vector的用法
vector<int>::iterator t;for(t=vec.begin();t!=vec.end();t++) cout<<*t<<endl; 使用迭代器遍例 vector(int nSize) 创建一个vector,元素个数为nSize vector(int nSize,const t& t) 创建一个vector,元素个数为nSize, 且值均为t vector(const vector&) 复制构造函数 vector(begin,end)复制[begin,end)区间内另一个数组的元素到vector中
例子
vector<int>v1(3);//[0,0,0] vector<int>v2(3,2);//[2,2,2] vector<int>v3(v2);//[2,2,2] int arr[]={1,2,3,4,5}; vector<int>v4(arr,arr+3);//[1,2,3] vector<int>v1(3);//[0,0,0] v1.push_back(2);//[0,0,0,2] v1.insert(v1.begin()+2,5);//[0,0,5,0,2] v1.insert(v1.begin()+2,3,1);//[0,0,1,1,1,5,0,2] v1.insert(v1.begin()+2,v1.begin()+1,v1.end()-2);//[0,0,0,1,1,1,5,1,1,1,5,0,2] int arr[]={1,2,3,4,5}; vector<int>v1(arr,arr+5);//[1,2,3,4,5] v1.erase(v1.begin()+1);//[1,3,4,5] v1.erase(v1.begin(),v1.end()-2);//[4,5] v1.clear();//[] #include <iostream> #include <vector> #include <cstdio> using namespace std; const int maxn = 30; int n; vector<int> pile[maxn]; //因为木块的长度不定,所以适合用vector保存 //找木块的pile和height,以引用的形式返回(配合void) void find_block(int a, int& p, int& h) { for(p = 0; p < n; p++) for(h = 0; h < pile[p].size(); h++) if(pile[p][h] == a) return; //要有自信好吧!这个复杂度也是o(n3) } //把第p堆高度为h的木块上方的所有木块移回原位。 void clear_above(int p, int h) { //p代表行,h代表列 for(int i = h+1; i < pile[p].size(); i++) { int b = pile[p][i]; pile[b].push_back(b); } pile[p].resize(h+1); //pile只应保留下标0~h的元素,采用这种方法,就不需要用pop一个一个弹出了。 } //把第p堆高度为h及其上方的木块整体移动到p2堆的顶部 void pile_onto(int p, int h, int p2) { for(int i = h; i < pile[p].size(); i++) //从块1所在行往上截取, pile[p2].push_back(pile[p][i]); //从块2所在列往上堆填 pile[p].resize(h); } //调试神奇print()重出江湖 void print() { for(int i = 0; i < n; i++) { printf("%d:", i); for(int j = 0; j < pile[i].size(); j++) print(" %d", pile[i][j]); printf("\n"); } } int main() { int a, b; cin >> n; string s1, s2; for(int i = 0; i < n; i++) pile[i].push_back(i); //压入,数据等于下角标 while(cin >> s1 >> a >> s2 >> b) { int pa, pb, ha, hb; find_block(a, pa, ha); //a是待移动木块角标,pa是所在行,ha是所在列 find_block(b, pb, hb); //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); } return 0; } 木块代码先留个坑
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- vector的初始化问题
- c++ <vector> push_back初始化问题
- 紫书章五例二 木块问题 UVA 101(vector)
- uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟
- vector的初始化问题
- 紫书章五例二 木块问题 UVA 101(vector)
- C++ Primer中的陌生概念三:vector的初始化问题
- uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟
- 对于vector初始化的问题
- 紫书章五例二 木块问题 UVA 101(vector)
- Vector 中内存分配的问题( resize、reserve )
- C++ 不定长数组vector 例5-2木块问题(The Blocks Problem,UVa 101)
- C++ Standard Stl -- SGI STL源码学习笔记(07) stl_vector 与 一些问题的细化 3 resize函数剖析
- Uva 101(vector的使用)木块问题
- STL容器中的vector初始化问题
- Uva - 101 木块问题(详解) - vector
- 用数组初始化vector的问题
- 个人研究《数据结构与算法分析-C++描述》Vector实现的问题,new与初始化
- vector<Mat>作为类成员变量,初始化问题
- STL中vector向量初始化问题