C++ Primer 第三章 标准库类型vector+迭代器iterator 运算
2016-07-28 11:14
399 查看
1.vector:
标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象。因为vector“容纳着”其他对象,所以它也常被称作容器(container)。
详细介绍:(1)矢量:具有方向性的量。
(2) 编程语言方面:vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
2.迭代器
迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。
迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符类获取数据。你还可以使用其他数学操作符如++。典型的,++操作符用来递增迭代器,以访问容器中的下一个对象。如果迭代器到达了容器中的最后一个元素的后面,则迭代器变成past-the-end值。使用一个past-the-end值得指针来访问对象是非法的,就好像使用NULL或为初始化的指针一样。
下面用一段手打代码来详细说明标准库vector:
结果图:
标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象。因为vector“容纳着”其他对象,所以它也常被称作容器(container)。
详细介绍:(1)矢量:具有方向性的量。
(2) 编程语言方面:vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
2.迭代器
迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。
迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符类获取数据。你还可以使用其他数学操作符如++。典型的,++操作符用来递增迭代器,以访问容器中的下一个对象。如果迭代器到达了容器中的最后一个元素的后面,则迭代器变成past-the-end值。使用一个past-the-end值得指针来访问对象是非法的,就好像使用NULL或为初始化的指针一样。
下面用一段手打代码来详细说明标准库vector:
//对象的集合的标准库类型vector #include <iostream> #include <vector> #include <string> using namespace std; int main() { vector <int> ivec1; vector <int> ivec2(ivec1);//把ivec1拷贝到ivec2; vector <int> ivec3=ivec1;//同上式意思一样; vector <int> ivec4(10,1);//元素为10个1; vector <string> ivec5(10,"a");//元素为10个"a"; vector<int> vec; for(auto i=0; i<10; i++) { vec.push_back(i);//将i压入到vec,使vec[i] = i; } for(unsigned int i=0; i<vec.size(); i++) { cout<<"初始化遍历:"<<vec[i]<<endl;//采用下标形式遍历 } vector<int>::iterator it;//it初始化为一个迭代器 for(it = vec.begin(); it!=vec.end(); it++) { cout<<"迭代遍历:"<<*it<<endl;//采用迭代器形式遍历 } vec.insert(vec.begin()+4,0);//vector插入元素,第五个元素插入为0; for(unsigned int i=0; i<vec.size(); i++) { cout<<"插入遍历:"<<vec[i]<<endl; } vec.erase(vec.begin()+2);//vector删除元素,删除第三个元素; for(unsigned int i=0; i<vec.size(); i++) { cout<<"擦除遍历:"<<vec[i]<<endl; } vec.erase(vec.begin()+3,vec.begin()+7);//vector删除元素,删除从第四个元素到第8个元素,第8个元素不删除 for(vector<int>::iterator it = vec.begin(); it!=vec.end(); it++) { cout<<"迭代遍历:"<<*it<<endl; } system("pause"); return 0; }
结果图:
![](https://images2015.cnblogs.com/blog/678448/201607/678448-20160728105630091-1616593162.png)
相关文章推荐
- 深度探索C++对象模型——学习笔记3
- c语言描述的链队列的基本操作
- POJ3622 挑剔的美食家(重庆一中高2018级信息学竞赛测验5) 解题报告
- OC和C++混编 系统类NSObjCRuntime, NSZone等报错问题
- 文章标题
- 【NOIP2008普及组】排座椅
- 能让你成为更优秀程序员的10个C语言资源
- 能让你成为更优秀程序员的10个C语言资源
- 第二章 C++基础篇之最全面的C/C++编码规范总结
- C++学习笔记(一)
- C++虚函数、纯虚函数、虚基类
- C++函数库大全
- C++ STL--stack/queue 的使用方法
- C语言中比较好的方法
- 极客班 C++(上)第二周学习笔记
- 封装的意义和喻义
- C++实现RTMP协议发送H.264编码及AAC编码的音视频(转)
- C++实现RTMP协议发送H.264编码及AAC编码的音视频(转)
- c语言描述的双向链表的基本操作
- 从OpenCV源码学习cpp_explicit