标准库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>是一种数据类型。
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)<<" ";}
- 标准库vector小结
- 标准库vector类型
- 标准库vector类型
- 标准库vector类型
- 标准库 vector
- 标准库vector类型
- 标准库Vector类型
- 标准库vector类型
- 标准库—vector
- 标准库 vector 类型
- 标准库vector类型
- 标准库类型vector
- 标准库vector类型
- C++标准库vector
- 标准库类型<vector>
- 标准库vector类型
- 初识标准库vector
- 标准库类型vector
- Java的poi技术读取和导入Excel
- 【HDU】4850 Wow! Such String! 提出猜想题 欧拉道路
- ASP.NET-动软代码生成器的使用
- 自译Solr in action中文版
- 指针的基本概念
- 标准库vector小结
- [歪谈]擦肩而过的“同性之好”与“道德”
- NFC SWP移动支付解决方案技术分析
- 神经网络:caffe特征可视化的代码样例
- Android ADB 端口占用问题解决方案
- 初探C++类模版学习笔记
- Android详细的对话框AlertDialog.Builder使用方法
- ECSHOP模板中 {insert name='‘。。。'}的用法
- 多线程的学习思考