标准库vector类型简介

一、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末尾添加t

v.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值