C++ Primer学习笔记7 标准库类型(标准库vector类型、迭代器简介)

1、标准库vector类型

vector是同一种类型的对象的集合,称为容器,一个容器中的所有对象必须是同一种类型。使用vector之前,必须包含相应的头文件。

#include<vector>
using std::vector;

必须说明vector保存何种类型的对象。

vector<int> ivec;      //类型为vector<int>,该类型包含若干个int对象

vector不是数据类型,vector<int>vector<string>等才是数据类型。

vector对象的定义和初始化

vector<T>  v1;       vector保存类型为T的对象,默认构造函数,v1为空

vector<T>  v2v1;    v2v1的副本

vector<T>  v3ni;   v3包含n个值为i的元素

vector<T>  v4n;      v4含有初始化的元素的n个副本

vector对象的重要属性在于可以在运行时高效地添加元素。当元素值已知时,最好是通过动态地向它添加元素来让它增长。

虽然可以对给定元素个数的vector对象预先分配内存,但更有效的方法是先初始化一个空的vector对象,然后再动态的增加元素。

vector对象的操作

V.empty();          如果V为空返回true,否则返回false  

V.size();            返回V中元素个数

V.push_back(t);      V的末尾增加一个 值为t的元素

V[n];               返回V中位置为n的元素

V1=v2              V1v2 的副本

V1==v2             如果V1v2 相等,则返回true

!=,<,<=,>,>=         惯有含义

vector对象的size

size返回相应vector类定义的size_type的值

vector<int>::size_type   ix;    //ok
vector::size_type   ix;    //  error

vector添加元素

push_back()操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面。

 string word;
	vector<string> text;
	while(cin>>word)
	{
		text.push_back(word);
	}

vector的下标操作

vector<int> ivec;      //类型为vector<int>,ivec为空
	for(vector<int>::size_type   ix=0;ix!=ivec.size();++ix)
    {
		ivec[ix]=0;
	}

ivec为空,for循环一次也不执行。

下标操作不能添加元素


 

 vector<int> ivec;     //ivec为空
	for(vector<int>::size_type   ix=0;ix!=10;++ix)
	{
		ivec[ix]=ix;   //错误
	}

上述程序试图在ivec中插入10个新元素,09,但是ivec为空,下标只能用于获取已经存在的元素。

正确写法是:

 vector<int> ivec;     //ivec为空
	for(vector<int>::size_type   ix=0;ix!=10;++ix)
	{
		ivec.push_back(ix);   //正确
	}
2、迭代器简介

迭代器(iterator)是一种检查容器内元素并遍历元素的数据类型。

迭代器提供了比下标更通用的方法:所有的标准库容器都定义了相应的迭代器,而只有少数容器支持下标操作。

vector<int>::iterator iter;

beginend操作

每种容器都定义了一对命名为beginend的函数,用于返回迭代器。由begin返回的迭代器指向第一个元素,由end返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器,标明它指向一个不存在的元素。

vector<int> ivec;     //ivec为空
vector<int>::iterator iter=ivec.begin();

迭代器可以使用解引用操作符(*操作符)来访问迭代器所指向的元素:iter指向ivec的第一个元素,那么*iterivec[0]指向同一个元素。

迭代器使用自增操作指向容器中下一个元素。由于end返回的迭代器不指向任何元素,所以不能对它进行解引用和自增操作。

vector<int> ivec;     //ivec为空
	for(vector<int>::size_type   ix=0;ix!=ivec.size();++ix)
	{
		ivec[ix]=0;   //正确
	}

vector<int> ivec;     //ivec为空
	for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
	{
		*iter=0;
	}

以上两个程序实现相同功能。

const_iterator

每种容器都定义了一种const_iterator类型,该类型只用于读取容器内元素,不可以改变其值。

for(vector<int>::const_iterator iter=ivec.begin();iter!=ivec.end();++iter)
	{
		cout<<*iter<<endl;
	}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值