读C++ Primer——vector标准库

vector类型

vector对象的定义和初始化

vector是一个类模板

vector<T> v1;//vector保存类型为T的对象。默认构造函数,v1为空
vector<T> v2(v1);//v2是v1的一个副本,确保两个对象类型相同
vector<T> v3(n,i);//v3是含n个值为i的元素
vector<T> v4(n);//v4含有初始化的元素的n个副本
值初始化
vector<int> v(10);//10个元素都被初始化为0
vector<string> v(10);//10个元素都被初始化为空串

如果元素类型是没有定义任何构造函数的类类型,这种情况下,标准库仍然产生一个带初始值的对象,这个对象的每个成员进行了值初始化

vector对象的操作
v.empty()//如果v为空,返回true
v.size()//返回v中元素的个数,返回值类型为size_type
v.push_back(t)//在v的末尾增加一个值为t的元素
v(n)//返回元素值
v1=v2//把v1的元素值全部替换为v2中元素的副本
!=,<,<=,>,>=//保持原有含义

注意:

  1. size()返回值类型为size_type
  2. 必须是已存在的元素才能下标操作进行索引,通过下标操作进行赋值时不会添加任何元素,添加元素要使用push_back()

迭代器的简介

每种容器都定义了自己的迭代器类型,迭代器是一种检查容器内元素并遍历元素的数据类型,因为迭代器对所有容器都适用,现代C++程序更倾向于使用迭代器而不是下标操作(只有少部分有下标操作)来访问容器元素

容器的iterator类型
vector<int>::iterator it;//it的数据类型为vector<int>定义的iterator类型
begin和end操作

每种容器都定义了一对命名为begin和end的函数,用于返回迭代器,如果容器内有元素,begin操作返回的迭代器指向容器内的第一个元素,end操作返回的是迭代器指向vector的“末端元素元素的下一个”,通常称为超出末端迭代器,它指向一个不存在的元素,若vector为空,begin和end操作返回的迭代器相同。

vector迭代器的自增和解引用运算
  1. *it来访问迭代器所指向的元素
  2. ++it来实现迭代器的移动,使其指向容器内的下一个元素
迭代器的其他操作

用==和!=操作符来比较两个迭代器,如果两个迭代器指向同一个元素,则他们相等,否则就不相等。

const_iterator类型

该类型的迭代器只能读取容器元素而不能改变元素的值

for(vector<int>::const_iterator it=v.begin();it!=v.end();++it) {
cout<<*it<<end;//ok
*it=0//error
}

不要把const_iterator对象与const的iterator搞混,声明一个const类型的迭代器时必须初始化,且初始化后不能改变其值(迭代器不能再移动)

vector<int> v(10,0);
for(const vector<int>::iterator it=v.begin();it!=v.end();it++) {
*it=1;//ok
++it;//error
}
const vector<int> v(10,0);
const vector<int>::iterator it=v.begin();//error
vector<int>::const_iterator it=v.begin()//ok
*it=10;//error
++it//ok
迭代器的算术操作
vector<int> v(10,0);
vector<int>::iterator it1;
vector<int>::iterator it2;
it1+n;//产生一个新的迭代器,其位置在it所指元素加n个位置(n为size_type或difference_type类型)
it1-n;
it1-it2;//计算两个迭代器对象之间的距离,两迭代器必须指向同一个vector容器(距离类型为difference_type)
vector::iterator mid=v.begin()+v.size()/2;//mid直接指向靠近容器中心的元素

注意:任何改变容器长度的操作都会使当前迭代器失效,例如调用push_back()添加元素后,就不能再信赖当前迭代器的值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无所畏惧的man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值