标准库vector小结

来源:互联网 发布:北京编程培训班 编辑:程序博客网 时间:2024/06/08 14:46

标准库vector

1、包含相应头文件和相应using声明:

#include <vector>using std::vector;

注:vector不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。所以,vector<int>、vector<string>都是数据类型。所以,vector<vector<int>> ivec; 是正确的定义,因为vector<int>是一种数据类型。


2、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个副本。

3、vector对象的操作

v.empty() 如果 v 为空,则返回 true, 否则返回 false 。
v . size () 返回 v 中元素的个数。
v . push _ back ( t ) 在 v 的末尾增加一个值为 t 的元素。
v [ n ] 返回 v 中位置为 n 的元素。
v1 = v2 把 v1 的元素替换为 v2 中元素的副本。
v1 == v2 如果 v1 与 v2 相等,则返回 true 。
!=, <, <=, >, >= 保持这些操作符惯有的含义。
pop_back()、erase()删除元素:向量容器的成员函数pop_back()可以删除最后一个元素,而函数erase()可以删除由一个iterator指出的元素,也可以删除一个指定范围的元素。

v.back() 返回容器中的最后一个元素

vector<int> x;x.erase(x.begin() + i);
还可以采用通用算法remove()来删除vector容器中的元素,不同的是,采用remove一般情况下不会改变容器的大小,而pop_back()与erase()等成员函数会改变容器的大小。


注:下标操作不添加元素



迭代器iterator介绍


1、容器的iterator类型

每种容器都定义了自己的迭代器类型,如vector:

vector<int>::iterator iter;

2、begin和end操作

每种容器都定义了一堆命名为begin和end的函数,用于返回迭代器。

由begin返回的迭代器指向第一个元素。

由end操作返回的迭代器指向vector的“末端元素的下一个”。


3、vector的自增和解引用运算

++iter来是迭代器“向前移动一个位置“。

解引用操作符(*操作符)来访问迭代器所指向的元素:

*iter = 0;

例:

for(vector<int>::iterator iter = vect.begin(); iter != vect.end(); iter++){    *iter = 0;//将所有元素设为0}

4、const_iterator

//不能修改其值的迭代器vector<int>::const_iterator //迭代器的值不能被改变(初始化时必须指向固定元素)const vector<int>::iterator

5、迭代器的算术操作

iter + niter - n
产生新的迭代器,其位置在iter所指元素之前(加)或之后(减)n个元素的位置。

iter1 - iter2
计算两个迭代器对象的距离。该距离是名为difference_type的signed类型的值。

注:没有两个迭代器的相加操作,所以以下操作时错的:

//如采用下面的方法来计算midvector<int>::iterator mid=(vi.begin()+vi.end())/2//将两个迭代器相加的操作是未定义的,因此用这种方法计算mid会出现编译错误 

正确做法:

//用迭代器算术操作,初始化mid,使其指向vi中最靠近正中间的元素vector<int>::iterator mid=vi.begin()+vi.size()/2;
vi.begin()与vi.end()返回的是迭代器。vi.size()返回的是元素个数。

附《C++ Primer 中文版(第4版)》习题3.13

/************************************************************************//* 读一组整数到vector对象,计算并输出每对相邻元素的和,如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。                      *//************************************************************************/#include <iostream>#include <vector>#include<string>using namespace std;using std::vector;using std::string;int main(){vector<int> vI;int nInput;/*读入一组数*/char c;cout<<"输入一组数,数之间用空格隔开:"<<endl;while ((c=cin.get())!= '\n'){cin.unget();cin>>nInput;vI.push_back(nInput);}/*求相邻数的和*/for (vector<int>::size_type ix = 0;ix < vI.size()-1;ix += 2){cout<<vI[ix]+vI[ix+1]<<" ";}cout<<"\n";if (0 != vI.size()%2){cout<<"最后一位没有求和"<<endl;}return 0;}

习题3.17 改为迭代器访问:

将下列代码

for (vector<int>::size_type ix = 0;ix < vI.size()-1;ix += 2){cout<<vI[ix]+vI[ix+1]<<" ";}
改为:

for (vector<int>::iterator iter1=vI.begin();iter1 < vI.end()-1; iter1+=2){cout<<*iter1+*(iter1+1)<<" ";}



0 0