您的位置:首页 > 其它

STL之Vector

2017-03-04 16:38 246 查看
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()是指向末尾元素的下一个元素
**********************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: