C++ 迭代器
Iterators
所有容器都有迭代器,string
虽然不是容器,但也能使用迭代器
1 | vector<int> v = {1, 2, 3}; |
b
指向第一个元素,e
指向最后一个元素的后一个位置
1 | for (auto it = v.begin(); it != v.end(); ++it) |
迭代器操作
1 | *iter // 解引用 |
Iterator Types
iterator
前面是直接使用 auto
自动判断迭代器类型,可以自己指定迭代器类型
1 | vector<int> v = {1, 2, 3}; |
const_iterator
另外还有 const
迭代器类型,和 const
指针一样,只能读取,不能修改
1 | vector<int>::const_iterator it3; // it3 can read but not write elements |
begin, end and auto
begin
和 end
返回的类型也取决于容器是否为
const
1 | vector<int> v; |
有的时候默认的返回类型可能不是我们想要的,如果我们想返回
const
迭代器可以使用 cbegin()
和
cend()
1 | auto it3 = v.cbegin(); // it3 has type vector<int>::const_iterator |
const
容器 不能 使用非
const
迭代器
访问对象成员
1 | // 假设 vector 的元素是 string |
解引用并访问对象的成员时,使用方法和指针是一样的
difference_type
前面提到了迭代器的操作,里面有加减法,实际上两个迭代器之间的偏移量的类型是
defference_type
,这是标准库中迭代器的内部类型
1 | std::vector<int> v = {1, 2, 3, 4, 5}; |
迭代器加减法就是通过这个类型实现的
1 | std::vector<int> v = {1, 2, 3, 4, 5}; |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.