[C++] 迭代器(iterator)介绍与使用
1.0 什么是迭代器?
摘要
迭代器是一种检查容器内元素并遍历元素的数据类型,通常用于对 C++ 中各种容器内元素的访问。
- 指向某个位置的对象
- 可能指向可读内存地址/对象
- 用于以与数据布局无关的方式迭代容器元素
- 还用于指定容器中的位置和范围 (用于插入、删除等)
2.0 从标准容器中获取元素 begin()
和 end()
可以从标准容器中获取一些特定位置的数据 (第一个元素、最后一个元素) 获取方式有两种:
- 成员函数
container.begin()
container.end()
- 独立函数
std::begin(container)
std::end(container)
2.1 通过 *
来访问指定位置的元素
基于 2.0 中给出的两种通过迭代器访问特定位置元素的方法,编写示例代码:
std::vector<int> vint;
// init container
for (int i = 0; i < 10; ++i){
vint.push_back(i);
}
auto vint_begin = vint.begin();
auto vint_end = vint.end();
//auto vint_begin = std::begin(vint);
//auto vint_end = std::end(vint);
std::cout << "vector begin - " << *vint_begin << std::endl;
return 0;
通过 *vint_begin
可以访问指定位置的元素:
*vint_begin
*(vint_begin + 1)
值得注意的是 *vint_end
迭代器仅用于位置指示器不能用于访问元素。
vector -> |1|2|3|4|5|6|7| |
|i| |e|
还有一些操作
++i
向终点移动 1 (--i
向起点移动 1)
vector -> |1|2|3|4|5|6|7| |
|i| |e|
i += x
前进 x (i -= x
倒退 x)
i += 4 / 前进 4
vector -> |1|2|3|4|5|6|7| |
|i| |e|
3.0 基于迭代器的循环
通过上面对迭代器的介绍显而易见的简单用法:
for (auto i = vint.begin(); i != vint.end(); ++i){
std::cout << *i << std::endl;
}
4.0 迭代范围
4.1 从容器中擦除 erase()
vint.erase(std::begin(vint) + 3, std::begin(vint) + 6);
END 参考与引用
[参考文章]
评论区(暂无评论)