C++11 迭代器(iteration)

在C++中,迭代器(iteration)提供了一种更通用的机制来访问string对象的字符或者vector容器的元素。所有的标准库容器,都可以使用迭代器,但是只有少数几种才同时支持下标运算符。

和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员。如:这些类型都拥有beginend成员。

  • begin: 负责返回指向第一个元素(或第一个字符的迭代器)。
  • end: 负责返回容器(或者string)“尾元素的下一个位置”的迭代器。(尾后迭代器)

1. 迭代器的运算符

*iter			// 返回迭代器iter所指元素的引用
iter->mem    	// 解引用iter并获取该元素名为mem的成员,等价于(*iter).mem 
++iter 			// 令iter指向容器的下一个元素
--iter			// 令iter指向器的上一个元素
iter1 == iter2  // 判断两个迭代器是否相等(是否指向同一个元素,或者同一个容器的尾后迭代器)
iter1 != iter2
*iter1 == *iter2	// 判断两个迭代器所指向的元素是否相同
*iter1 != *iter2  
  • for循环,遍历
for (auto it = s.begin(); it != s.end(); ++it) {
    std::cout << *it << std::endl;		// 解引用打印对应的元素
}
  • 迭代器的类型: iterator 和 const_iterator
vector<int>::iterator	it;		// it可以读写vector<int>的元素
string::iterator it2;		// it2可以读写string中的元素

vector<int>::const_iterator it3	// it3只能读元素,不能写元素
string::const_iterator it4		// it4只能读字符,不能写字符
  • begin/end和cbegin/cend运算符

begin和end返回的具体类型由对象是否是常量决定,如果是常量,begin和end返回的const_iterator;如果不是常量,返回iterator

vector<int> v;
const vector<int> cv;
auto it1 = v.begin();	// it1的类型是vector<int>::iterator
auto it2 = cv.begin();	// it2的类型是vector<int>::const_iterator

如果对象只需要读操作,而无需写操作最好使用常量类型,为了便于得到const_iterator类型的返回值,C++11引入了cbegin和cend,用法与begin和end相同,但返回的只能是const_iterator类型。

  • 解引用运算符(*)、成员访问操作(.)和箭头运算符(->)

C++定义箭头运算符**(->),将解引用和成员访问操作结合到了一起。即(*iter).mem和iter->mem**表达的意思相同

(*it).empty()		// 判断迭代器的成员是否为空。
it -> empty()		// 与上面的式子相同 

2. 迭代器运算

iter + n 		// 返回的迭代器是原迭代器向前移动若干个元素。如果超出容器的范围,则返回迭代器的第一个元素的位置,或者尾元素的下一个位置。     
iter - b 		// 返回的迭代器是原迭代器向后移动若干个元素。如果超出容器的范围,则返回迭代器的第一个元素的位置,或者尾元素的下一个位置。
iter += n		// 迭代器加法赋值语句,将iter + n 赋值给iter  (!!!不能超范围!!!)
iter -= n		// 迭代器减法赋值语句,将iter - n 赋值给iter	(!!!不能超范围!!!)
iter1 - iter2 	// 返回两个迭代器,之间的距离。返回的类型为difference_type,带符号的整数。建议使用auto
>>=<<===!=	// 判断两个迭代器的位置。必须是同一个容器的迭代器
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值