迭代器

迭代器

迭代器的简介

STL原码剖析一书中这样解释迭代器

迭代器(iterators)是一种抽象的设计概念,实现程序语言中并没有直接对应于这个概念的实物。<>一书提供有23个设计模式(design patterns)的完整描述,其中iterator 模式如下:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。

(1):每种容器类型都定义了自己的迭代器类型,如string: string::iterator sit; 这条语句定义了一个名为sit的变量,它的数据类型是由string定义的iterator类型

使用迭代器读取string中的每一个元素

string s("hello bit!");
string::iterator sit = s.begin();
while (sit != s.end()){
	cout << *sit;
	++sit;
}

2.const(只读)迭代器

只能读取容器中的元素,而不能修改。

string::const_iterator sit = s.begin();
cout << "NO_2:" << " ";
while (sit != s.end()){
	cout << *sit ;
	++sit;
}

在const迭代器使用的过程中,只能在遍历的时候读取元素不能对容器中的元素进行修改

(3):反向迭代器

反向遍历容器中的元素

string s("hello bit!")
string::const_reverse_iterator sit = s.rbegin();
	cout << "NO_3:" << " ";
while (sit != s.rend()){
	cout << *sit;
	++sit;
	//从字符串的末尾开始遍历元素,语句上看着是++sit,
	//而内部实现却是--;
}

rbegin指向最后一个位置
rend指向第一个位置的前一个位置

一个典型的迭代器的使用的例子

#include<iostream>
#include<string>
#include<vector>
#include<list>


using namespace std;


//const迭代器的使用
void printString(const string &s){
	string::const_iterator sit = s.begin();
	cout << "NO_2:" << " ";
	while (sit != s.end()){
		cout << *sit ;
		++sit;
	}
	cout << endl;
}

//反向迭代器
void printRString(const string &s){
	string::const_reverse_iterator sit = s.rbegin();
	cout << "NO_3:" << " ";
	while (sit != s.rend()){
		cout << *sit;
		++sit;
		//看着是++,内部是--
	}
	cout << endl;
}
//rbegin指向最后一个位置
//rend指向第一个位置的前一个位置



//普通迭代器
void testiterator(){
	string s("hello bit!");
	string::iterator sit = s.begin();
	cout << "NO_1:" << " ";
	while (sit != s.end()){
		cout << *sit;
		++sit;
	}
	cout << endl;
	printString(s);
	printRString(s);


	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4); 
	v.push_back(5);

	vector <int>::iterator vit = v.begin();
	while (vit != v.end()){
		cout << *vit;
		++vit;
	}
	cout << endl;
}

int main(){
	testiterator();
	return 0;
}

程序运行结果
在这里插入图片描述

【迭代器】:

涉及模式:访问机制

在外部:看作指针使用,内部实现上,不同容器有

不同的实现方式不一定是原生指针

【迭代器分类】

1.正向迭代器(可读可写)

2.方向迭代器(可读可写)

3.const迭代器(只读)

【小结】

begin:第一个元素的位置

end:最后一个元素的下一个位置

rbegin:最后一个元素的位置

rend:第一个元素的前一个位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值