首页 > 学院 > 开发设计 > 正文

STL之Vector

2019-11-06 07:37:12
字体:
来源:转载
供稿:网友

1.vector:被称为向量,其实就相当于一个动态分配的数组;特点:不需要你提前分配数组的内存空间大小,只要你的电脑内存空间够用,那么你就可以一直往里面插入元素;因此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()是指向末尾元素的下一个元素 **********************/
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表