c++ primer学习札记_vector,迭代器

一 vector容器

      vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值,vector 称为容器,是因为它可以包含其他的对象。

二 vector对象的定义和初始化

1.vector初始化的几种方式  

vector<T> v1;//默认构造函数为空
vector<T> v2(v1);//v2是v1的一个副本
vector<T> v3(n,i);//v3包含n个值为i的元素
vector<T> v4(n);//v4含有值初始化的元素的n个副本

注:vector对象的重要属性就在于运行时可以高效率的动态增长,在元素值已知的情况下最好是动态地添加元素

2.值初始化

   如果没有指定元素的初始化式,标准库将自行提供一个元素初始值进行值初始化,具体的值取决于存储的vector的元素的数据类型。

三 vector对象的操作

v.empty();//判断是否为空
v.size();//返回vector里面的元素的个数,和string对象一样,返回值是:vector<T>::size_type
v.push_back(t);//在v的末尾增加一个值为t的元素
v[n];//返回v中位置为n的元素
v1=v2;//把v1的元素替换为v2中元素的副本
v1==v2;//如果v1与v2相等,则返回true
!=,<,<=,>,>= //保持这些操作的惯有含义


1.向vector中添加元素

#include<iostream>
#include<vector>
    using namespace std;
int main()
{
    vector<int> a;
    cout<<a.size()<<endl;
    a.push_back(2);
    cout<<a[0]<<endl;
    a.push_back(3);
    cout<<a[1]<<endl;
    cout<<a.size();
    return 0;
} 
2.vector的下标操作只能返回对应位置的元素,不能添加元素
vector <int> a;
for(vector<int >::size_type ix=0;ix!=10;++ix)
     a[ix]=ix;
上面这段程序会发生错误,a是空的vector对象,不能用下标来添加元素

正确的写法是

vector <int> a;
for(vector<int >::size_type ix=0;ix!=10;++ix)
     a.push_back(ix);
四 迭代器

   标准库为每一种容器定义了一种迭代器类型。迭代器类型提供了比下标操作更通用的方法。

   1.vector 容器的迭代器   vector<T>::iterator  iter;

   2.begin和end    

vector<int> a;
vector<int >::iterator iter;
iter=a.begin();
上述语句把iter初始化为a[0](假设vector不空)


由end操作返回的迭代器指向vector的末端元素的下一个。通常称为超出末端迭代器,表明它指向了一个不存在的元素。如果vector为空,begin返回的迭代器与end返回的迭代器类型相同。

3. vector 迭代器的自增和解引用

   迭代器类型可使用解引用操作符来访问迭代器所指向的元素。

   迭代器使用自增操作来指向下一个元素

4. const_iterator

    每种容器类型还定义了一种名为 const_iterator的类型,该类型只能用于读取容器内的元素,但不能改变其值。

//text是vector<string>类型
for(vector<string>::const_iterator iter=text.begin();iter!=text.end();++iter)
    cout<<*iter<<endl;
    上面的代码是正确的

//text是vector<string>类型
for(vector<string>::const_iterator iter=text.begin();iter!=text.end();++iter)
    *iter='"    ";
错误,不能改变const_iterator的值

注:不要混淆了const_iterator 和const 的iterator,声明一个const迭代器必须初始化迭代器,一旦被初始化就不能改变它的值。

vector<int> nums(10);
const vector<int>::iterator cit=nums.begin;
*cit=1;//正确
++cit;//错误,不能堆const迭代器赋值


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值