第三章 vector

1.vector类(注意,它是一个类了)为内置数组提供了一种替代表示,与string类一样,vector类是标准C++引入的标准库的一部分。

2.为了使用vector,我们需要引入相关头文件:#include<vector>

3.使用vector有两种不同的形式,即所谓的数组习惯和STL习惯。在数组习惯用法中,我们模仿内置数组的用法’定义一个已知长度的vector:

如:vector<int> ivec(10);//它就类似于int  ia[10];


4.vector的元素被初始化为与其类型相关的缺省值,算术和指针类型缺省值为0.而对于class类型,缺省值可通过调用这个类的缺省构造函数获得。(注意,像内置数据类型,如int 等,是全局变量的话则会初始化为0.局部变量则不会。而C++ 标准库类型或者用户自定义的类,则会根据构造函数来初始化)


5.当然我们也可以显式的初始化一个向量:vector<int>ivec(10,-1);


6.对于内置数组,我们可以显式得把数组的元素初始化为一组常量值。如: int ia[6]={-2,-1,0,1,2,1024};

  我们不能用相同的方法显式地初始化vector,但是可将vector初始化为一个已有数组的全部或一部分。通过制定已有数组的开始地址和最末地址的下一位(注意,是下一位)即可。

如vector<int>ivec(ia,ia+6)。就可以把数组ia拷贝到ivec中。

当然,也可以截取其中的一部分,如:vector<int> ivec(&ia[2],&ia[5]);


7.vector可以被另一个vector初始化,或被赋给另一个vector。如:

vector<string> svec;vector<string>user_names(svec);//用svec初始化user_name。

vector<string> svec2;svec2=svec;//直接赋值。


8.STL中对vector的习惯用法完全不同,我们不是定义一个已知大小的vector,而是定义一个空vector:

     vector<string>text;

然后我们向vector中插入元素,而不再是索引元素,我们使用push_back()这个方法来向vector的后面插入元素。比如:

string word;

while(cin>>word)

{

  text.push_back(word);

}

访问元素我们的典型用法是使用vector操作集中的begin()和end()所返回的迭代器(iterator)

for(vector<string>::iterator it=text.begin();it!=text.end();++it)

                       cout<<*it<<'  ';

其实iterator是标准库中的类,它具有指针的功能。


10.注意,当我们这样写:vector<int>ivec;的时候,我们定义的是一个空的vector,如果写这样的语句ivec【0】=1024。这个语句的本意是赋值,但是是错的,因为我们所定义的ivec是个空向量,而ivec[0]是一个取索引的操作,对于空向量,我们还没有第一个元素,所以不能取索引。(我们只能索引已经存在的元素)


11.posh_back操作是在已有的向量的后面插入,而不是覆盖掉某个现有的元素。比如以下程序:

const int size=7;

int ia[size]={0,1,1,2,3,5,8};

vector<int>ivec(size);//这时候ivec其实已经初始化为全0 的七个元素

for(int ix=0;ix<size;++ix)

  ivec.push_back(ia[ix]);

这个程序的本意是想用ia的七个元素填充ivec,但是结果会造成ivec有14个元素,ia的元素从第八个元素才开始插入。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值