标准库vector类型简介

来源:互联网 发布:上瘾网络剧见面会视频 编辑:程序博客网 时间:2024/04/30 21:29

一、vector类型是什么


         在C语言中,我们可以通过数组定义普通类型数据或自定义类型数据的集合。数组的缺点很明显,程序员必须提前规定数组的大小,这可能导致两种结果:长度太小导致不够用,或者长度太大导致空间浪费。如果要实现可以动态增长的数组,我们就需要使用一些数据结构方面的知识,如链表。
       C++标准库提供了vector类型,通过vector类型,我们可以很方便的定义大小可以动态改变的数据集合。

二、vector类型的使用


1. 定义vector对象

vector<int> v1;//定义vector类型的对象v1,v1默认为空,保存int类型元素vector<int>v2(v1);//定义vector类型的对象v2,用v1来初始化vector<int> v3(3);//v3保存了3个值为0的int元素vector<string> v4(3);//v4保存了3个值为空的string元素vector<T> v5(n,i);//v5保存了n个值为i的元素

2. 操作vector对象

        vector对象的简单使用如下:
        
v.push_back(t)            在v末尾添加tv.pop_back()              删除v末尾的元素v[n]                      返回v中n处的元素

#include <iostream>#include <vector>using namespace std;//using std::vector;int main(void){vector<int> myVector;//动态添加元素for (vector<int>::size_type i = 0; i != 3 ;i++){myVector.push_back(i);}//下标操作for (vector<int>::size_type i = 0; i != myVector.size();i++){cout<<myVector[i]<<endl;}myVector.pop_back();cout<<endl<<"After pop_back():"<<endl;for (vector<int>::size_type i = 0; i != myVector.size();i++){cout<<myVector[i]<<endl;}}



三、使用iterator访问vector的元素

1、iterator类型

        对vector的元素进行访问除了使用下标外,还可以使用iterator(迭代器)类型。iterator基本用法如下:
vector<int>::iterator myIter;        //定义iterator类型变量myIter = myVector.begin();           //myIter指向myVector第一个元素cout<<*myIter<<endl;                 //解引用操作myIter++;                            //myIter指向myVector第二个元素myIter = myVector.end();             //myIter指向myVector最后一个元素的下一个cout<<*myIter<<endl;                 //解引用操作会出现运行时错误

2、使用iterator访问vector元素

        在上面的程序末尾添加如下几行,运行结果如下。可以发现,使用inser()向vector插入元素时,元素插入在了迭代器指向元素的位置,而插入之前的元素顺序后移。
vector<int>::iterator myIter;myIter = myVector.begin();//插入元素myVector.insert(myIter,5);cout<<endl<<"Afer Insert:"<<endl;for (vector<int>::iterator it = myVector.begin();it != myVector.end();it++){cout<<*it<<endl;}

        

3、const_iterator和const iterator


        vector<int>::const_iterator myIter;
        const vector<int>::iterator myIter;

        这两者有什么区别呢?const_iterator定义的迭代器不能改变它所指向元素的值,而迭代器自身可以改变,即可以指向不同的元素;而const iterator用来定义常量迭代器,它自身不能改变,即只能指向一个元素,而迭代器指向元素的值可以改变。
vector<int>::const_iterator myConstIter1;myConstIter1 = myVector.begin();myConstIter1++;//正确,可以指向不同的元素*myConstIter1 = 1;//错误,指向的元素的值不能改变const vector<int>::iterator myConstIter2 = myVector.begin();*myConstIter2 = 1;//正确,指向的元素的值可以改变myConstIter2++;//错误,只能指向固定的元素



0 0