初步STL集装箱Vector
2015-07-17 20:48
302 查看
vector
特点:
1.可变长的动态数组2.使用时包括头文件 #include <vector>
3.支持随机訪问迭代器
• 依据下标随机訪问某个元素时间为常数
• 在尾部加入速度非常快
• 在中间插入慢
成员函数
初始化
vector(); 初始化成空 vector(int n); 初始化成有n个元素 vector(int n, const T & val); 初始化成有n个元素, 每一个元素的值都是val,类型是T vector(iterator first, iterator last); 初始化为与别的容器上区间[first, last)一致的内容
举例:
1.创建一个int类型的空的vector对象:
vector<int> intvec;
2.创建一个包括5个int类型数据的vector:
vector<int> intvec(5);
3.创建一个包括5个int类型数据的vector,而且都初始化为2:
vector<int> intvec(5, int(2));
4.通过复制某vec容器来创建
vector<int> intvec(vec.begin+M,vec.begin+N)
元素的訪问
intvec.at(index) | 返回由index指定的位置上的元素 |
intvec[index] | 返回由index指定的位置上的元素 |
include <iostream> #include <vector> using namespace std; int main() { vector<int> vec(10); for (int i = 0;i != vec.size();i++) { vec.at(i) = i; //vec[i] = i ; } for (int i = 0;i != vec.size();i++) { cout << vec.at(i)<<endl; //cout <<vec[i]<<endl; } return 0; }
容器的大小
表达式 | 作用 |
intvec.capacity() | 返回不又一次分配空间能够插入到容器intvec中的元素的最大个数 |
intvec.empty() | 容器intvec为空。返回true;否则,返回false |
Intvec.size() | 返回容器intvec中当前的个数 |
intvec.resize(num) | 将元素个数改为num。假设size()添加,默认的构造函数负责创建这些新元素 |
intvec.resize(num, elem) | 将元素个数改为num。 假设size()添加,默认的构造函数将这些新元素初始化为elem |
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vec1; cout << vec1.empty()<<endl; //返回1 cout << vec1.size()<<endl; //返回0 vector<int> vec2(20); cout << vec2.empty()<<endl; //返回0 cout << vec2.size()<<endl; //返回20 vector<int> vec3(15,1); cout << vec3.capacity()<<endl;//返回15 vec3.push_back(1); cout << vec3.size()<<endl; //返回16 cout << vec3.capacity()<<endl;//返回30 //数组不够时。下次又一次分配时会扩大为两倍 return 0; }
容器的操作
语句 | 作用 |
intvec.clear() | 从容器中删除全部元素 |
intvec.erase(position) | 删除由position指定的位置上的元素 |
intvec.erase(beg,end) | 删除从beg到end-1之间的全部元素 |
intvec.insert(position, elem) | 将elem的一个拷贝插入到由position指定的位置上,并返回新元素的位置 |
intvec.inser(position, n, elem) | 将elem的n个拷贝插入到由 position指定的位置上 |
intvec.insert(position, beg, end) | 将从beg到end-1之间的全部元素的拷贝插入到intvec中由position指定的位置上 |
intvec.push_back(elem) | 将elem的一个拷贝插入到vector的末尾 |
intvec.pop_back() | 删除最后元素 |
intvec.front() | 返回第一个元素的引用,不检查容器是否为空 |
Intvec.back() | 返回最后一个元素的引用,不检查容器是否为空 |
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vec(10,1); cout<<vec.empty()<<endl; //返回0 vec.clear(); cout<<vec.empty()<<endl; //返回1 vector<int> vec1(1,1); vec1.insert(vec1.begin()+1,2); //在该位置插入,把原来该位置以其以后的元素总体后移 for(int i = 0;i != vec1.size();i++) cout<<vec1.at(i); //12 cout<<endl; vec1.push_back(3); for(int i = 0;i != vec1.size();i++) cout<<vec1.at(i); //123 cout<<endl; vec1.pop_back(); vec1.pop_back(); for(int i = 0;i != vec1.size();i++) cout<<vec1.at(i); //1 cout<<endl; return 0; }
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vec(10,1); vec.push_back(2);//12 cout<<vec.front()<<endl; //返回1 cout<<vec.back()<<endl; //返回2 int &head = vec.front(); head++; int &tail = vec.back(); tail--; cout<<vec.front()<<endl; //返回2 cout<<vec.back()<<endl; //返回1 return 0; }
二维数组
vector< vector<int> > v(3);//v有3个元素,
//每一个元素都是vector<int> 容器
#include <iostream> #include <vector> using namespace std; int main() { vector< vector<int> > v(3); for(int i=0; i<v.size(); ++i) for(int j=0; j<4; ++j) v[i].push_back(j); for(int i=0; i<v.size(); ++i){ for(int j=0; j<v[i].size(); ++j) cout<<v[i][j]<<" "; cout<<endl; } return 0; }
输出:
0 1 2 3
0 1 2 3
0 1 2 3
相关文章推荐
- 触发器原理
- 卡片游戏O(∩_∩)O
- HDU 3065 病毒侵袭持续中(AC自动机)
- 解决冲突(避免冲突)
- 汇编语言得玩转
- POJ 2003 Hire and Fire (多重链表 树结构 好题)
- 2015 HUAS Summer Training#1 B
- Oracle和SQL SERVER在SQL语句上的差别
- 【rqnoj39】 饮食问题
- php判断假图片的方法
- javaWeb面试题
- IP协议和TCP协议的分析
- hdu 2680 Choose the best route
- DFS深度搜索的一般思想
- 线性筛法及扩展
- UVA - 11995 I Can Guess the Data Structure!
- 1009. Product of Polynomials (25)
- hdu 3074 Multiply game(线段树)
- [献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南。
- 【rqnoj28】[Stupid]愚蠢的宠物