STL迭代器是访问容器元素的核心工具,分为输入、输出、前向、双向和随机访问五类,功能依次增强。vector等容器支持随机访问迭代器,可高效跳转;list等支持双向迭代器,能前后移动;unordered容器仅支持前向迭代器。使用时需注意迭代器失效问题,避免操作无效指针。算法如find、sort依赖迭代器范围,应合理选择容器与迭代器类型以提升效率。
STL(Standard Template Library)中的迭代器是访问容器元素的核心工具,它像指针一样可以遍历、读取或修改容器中的数据。理解迭代器的类型和使用方法,对掌握C++ STL至关重要。
迭代器通过begin()和end()函数获取容器的起始和末尾后一个位置。用循环遍历容器是最常见的操作方式。
例如,使用vector演示基本遍历:
#include#include usin g namespace std; int main() { vector
nums = {1, 2, 3, 4, 5}; for (auto it = nums.begin(); it != nums.end(); ++it) { cout << *it << " "; } return 0; }
输出结果为:1 2 3 4 5。注意end()指向的是最后一个元素的下一个位置,不能直接解引用。
C++中根据功能强弱将迭代器分为五类,每种支持的操作不同。
功能由弱到强依次为:输入/输出 → 前向 → 双向 → 随机访问。高级迭代器可替代低级用途。
每种容器提供的迭代器能力不同,选择合适容器影响算法使用。
比如vector支持it + 5跳转,而list不支持,必须用std::advance(it, 5)逐步移动。
迭代器使用中需注意有效性与操作限制。
例如,使用find查找元素:
auto it = find(nums.begin(), nums.end(), 3);
if (it != nums.end()) {
cout << "找到元素:" << *it;
}
基本上就这些。掌握这五类迭代器的区别和适用场景,能更高效地使用STL容器与算法。