STL之Vector
2017-03-04 16:38
246 查看
1.vector:被称为向量,其实就相当于一个动态分配的数组;特点:不需要你提前分配数组的内存空间大小,只要你的电脑内存空间够用,那么你就可以一直往里面插入元素;因此vector弥补了数组的不足(数组:在使用数组之前,得提前分配内存空间大小;因为事先往往不确定所需要的具体内存多大,因此时常会造成内存空间的浪费);
vector的基本操作:
(1) vector类型变量v1的创建、插入元素(支持下标运算符[]和)、和删除,获取头部元素、获取尾部元素、弹出尾部元素等;
注意:在使用push_back()的时候,是从尾部插入元素;如果我们为vector变量分配了内存10个空间大小,此时v1.size()为10;若再调用v1.push_back(10);v1.push_back(11);此时v1.size()位12;如:
(2)vector的遍历
可以采用下标(保证里面有元素和知道vector空间的大小)和迭代器的方式;
注:迭代器中的begin()和end()的位置:begin()是指向向量v1的开头的第一个元素;而end()是指向向量v1的尾元素的下一个元素(实际上这个元素是未知的);
(3)迭代器的反向遍历
(4)vector元素的删除
这里写代码片
vector的基本操作:
(1) vector类型变量v1的创建、插入元素(支持下标运算符[]和)、和删除,获取头部元素、获取尾部元素、弹出尾部元素等;
#include<iostream> #include<vector> using namespace std; int main() { /********************** *注意:需要表明vector的数据类型, *可以是基本类型,也可以是复杂的派生类型 */ vector<int> v1; /*********************** *1.用数组下标的形式;此时得提前分配内存空间, * 不能使vector<int> v1;应为vector<int> v1(空间大小n); */ vector<int> v2(10); for(int i = 0; i< 10; i++) { v2[i] = i + 1; } //2.用vector中的push_back();尾部插入元素 v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); ``````````````` //3.获取头部元素 v1.front(); //4.获取尾部元素 v1.back(); //5.弹出尾部元素 v1.pop_back(); //6.获取变量v1的大小 v1.size(); system("pause"); return 0; }
注意:在使用push_back()的时候,是从尾部插入元素;如果我们为vector变量分配了内存10个空间大小,此时v1.size()为10;若再调用v1.push_back(10);v1.push_back(11);此时v1.size()位12;如:
(2)vector的遍历
可以采用下标(保证里面有元素和知道vector空间的大小)和迭代器的方式;
vector<int> v1; v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); v1.push_back(5); v1.push_back(6); 方式1:数组形式 for(int i = 0; i < 6; i++) { cout<<v1[i]<<endl; } 方式2:迭代器(正向遍历和反向遍历) vector<int>::iterator it = v1.begin(); while(it != v1.end()) { cout<<*it<<endl; //it相当于一个指针,这里:解引用 ++it; } 方式3;C++11新标准提供的一种语句,范围for语句; for( auto var : v1) { cout<<var<<endl; }
注:迭代器中的begin()和end()的位置:begin()是指向向量v1的开头的第一个元素;而end()是指向向量v1的尾元素的下一个元素(实际上这个元素是未知的);
(3)迭代器的反向遍历
vector<int>::reverse_iterator rit = v1.rbegin(); while(rit != v1.rend()) { cout<<*rit<<endl; //rbegin(),rend()位置见上图; }
(4)vector元素的删除
//1.区间删除 如:v1.erase(p,q);删除p~q之间的元素 v1.erase(v1.begin(),v1.begin()+3);
这里写代码片
//2.指定元素的删除 v1.erase(p); p是一个迭代器 v1.erase(v1.begin()); /********************** *不能企图用v1.erase(v1.end());来删除末尾元素, *因为end()是指向末尾元素的下一个元素 **********************/
相关文章推荐
- STL中vector自定义对象的排序、删除
- [C++杂记] STL中vector中clear的使用
- STL的vector与MFC的CArray哪个速度更快?
- STL vector list deque区别与实现
- STL讲解 容器(map,set,vector,stack,queue)
- STL中vector、list、deque和map的区别
- STL中的常用的vector,map,set,Sort用法
- Josephus约瑟夫环问题STL模版类vector实现
- STL 容器区别:vector、list、deque、set、map的底层实现
- STL容器之vector
- stl中容器string vector list deque 比较
- STL容器之vector
- STL学习--vector的学习
- STL中为什么我们更偏爱vector而不是deque
- STL中vector的resize和reserve问题(转载)
- 文章标题STL中vector,Map,Set的实现原理
- 【STL】之Vector的模拟实现
- STL之vector容器的实现框架
- STL--vector
- [STL] vector基本用法