C++ Iterator迭代器介绍及Iterator迭代器用法代码举例
来源:互联网 发布:普华永道待遇 知乎 编辑:程序博客网 时间:2024/05/17 09:21
C++ Iterator迭代器介绍
迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:
迭代器 描述
input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。
output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)。
forward_iterator 可向前移动的,同时具有读写功能的迭代器。同时具有input和output迭代器的功能,并可对迭代器的值进行储存。
bidirectional_iterator双向迭代器,同时提供读写功能,同forward迭代器,但可用来进行增加(++)或减少(--)操作。
random_iterator 随机迭代器,提供随机读写功能.是功能最强大的迭代器, 具有双向迭代器的全部功能,同时实现指针般的算术与比较运算。
reverse_iterator 如同随机迭代器或双向迭代器,但其移动是反向的。(Either a random iterator or a bidirectional iterator that moves in reverse direction.)
vector容器类就有一个random-access随机迭代器,这也意味着其可以使用随机读写的算法。既然随机迭代器具有全部其它迭代器的特性,这也就是说为其它迭代器设计的算法也可被用在vector容器上。
C++ Iterator迭代器操作举例
(www.169it.com)
(1) 每种容器类型都定义了自己的迭代器类型,如vector:
vector<
int
>::iterator iter;
//这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。
(2) 使用迭代器读取vector中的每一个元素:
vector<
int
> ivec(10,1);
for
(vector<
int
>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
{
*iter=2;
//使用 * 访问迭代器所指向的元素
}
const_iterator:
只能读取容器中的元素,而不能修改。
for
(vector<
int
>::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)
{
cout<<*citer;
//*citer=3; error
}
vector<
int
>::const_iterator 和
const
vector<
int
>::iterator的区别
const
vector<
int
>::iterator newiter=ivec.begin();
*newiter=11;
//可以修改指向容器的元素
//newiter++; //迭代器本身不能被修改
(3) iterator的算术操作:
iterator除了进行++,--操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.
const
vector<
int
>::iterator newiter=ivec.begin();
vector<
int
>::iterator newiter2=ivec.end();
cout<<
"\n"
<<newiter2-newiter;
一个很典型使用vector的STL代码:
#include <vector>
#include <iostream>
using
namespace
std;
int
main()
{
vector<
int
> ivec;
ivec.push_back(1);
ivec.push_back(2);
ivec.push_back(3);
ivec.push_back(4);
for
(vector<
int
>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)
cout << *iter << endl;
}
如下代码对vector容器对象生成和使用了迭代器:
vector<
int
> the_vector;
vector<
int
>::iterator the_iterator;
for
(
int
i=0; i < 10; i++ )
the_vector.push_back(i);
int
total = 0;
the_iterator = the_vector.begin();
while
( the_iterator != the_vector.end() ) {
total += *the_iterator;
the_iterator++;
}
cout <<
"Total="
<< total << endl;
提示:通过对一个迭代器的解引用操作(*),可以访问到容器所包含的元素。
- C++ Iterator迭代器介绍及Iterator迭代器用法代码举例
- C++ Iterator迭代器介绍及Iterator迭代器用法代码举例
- 新学习到的Java Iterator(迭代器用法)
- Iterator 迭代模式
- 迭代模式(Iterator)
- iterator迭代遍历
- java迭代Iterator
- iterator迭代
- struts2 iterator迭代
- 迭代Iterator结合ArrayList集合的使用及基本使用,再看迭代Iterator原理
- 迭代器用法
- struts2 iterator标签--迭代!
- php关于Iterator (迭代)
- php关于Iterator (迭代)
- 迭代输出:Iterator总结
- 迭代模式 Iterator Pattern
- 使用Iterator迭代删除
- Iterator 集合的迭代
- 解决eclipse中查看android工程代码出现android.jar has no source attachment
- JAVA MD5加密
- 使用Node.js创建命令行工具
- Linux-KVM, QEMU, Virtualbox, VMWare
- 淘宝网采用什么技术架构来实现网站高负载的
- C++ Iterator迭代器介绍及Iterator迭代器用法代码举例
- 进程间通信之共享内存
- Play 1 Notes
- Struct 和 Union区别
- Mybatis学习之实现数据的增删改查(3)
- c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件
- SAX解析xml基础
- Android中ContentProvider组件详解
- 在win7 64位系统下安装Flask