学习心得 - 语法 - 查漏补缺 - 迭代器

· · 算法·理论

查漏补缺。

begin(),cbegin(),rbegin(),crbegin()

begin() 是指向第 1 个元素前一个的迭代器。

cbegin() 是 const 类型的,其他同上。

rbegin() 是指向最后 1 个元素的迭代器。

crbegin() 是 const 类型的,其他同上。

特别的,rbegin() 属于反向迭代器。

end(),cend(),rend(),crend()

end() 是指向最后 1 个元素后一个的迭代器。

cend() 是 const 类型的,其他同上。

rend() 是指向第 1 个元素的迭代器。

crend() 是 const 类型的,其他同上。

特别的,rend() 属于反向迭代器。

(正向)迭代器移动

++ 指向后一个,-- 指向前一个。

(反向)迭代器移动

++ 指向前一个,-- 指向后一个。

(正向)排序

对应的,vector 类型的数组可以通过迭代器排序。

正向排序语法:sort(vec.begin(),vec.end())。

(反向)排序

你可能会选择写函数,或者重载运算符,但是你可以选择:

反向排序语法:sort(vec.rbegin(),vec.rend())。

函数使用

我们发现平时格式都是 容器.begin()/容器.end(),那么为什么 begin 和 end 都是关键字呢?

因为 begin(容器),end(容器) 都可以返回相同的结果。

* 地址

对迭代器解引用(*)可以读取元素。

对迭代器结构体解引用(->)可以读取结构体里的元素。

* 多类型

输入迭代器 输出迭代器 前向迭代器 双向迭代器 随机访问迭代器
只读 只写 向前推进 前后推进 访问任意元素(跳跃)
++,--,!= ++ ++,--,!= ++,-- ++,--,[x],-x,<,<=,>,>=