STL迭代器是访问容器元素的统一接口,本质为重载指针操作符的类对象,解耦算法与容器,使sort、find等算法不依赖具体容器类型;通过begin()/end()获取,end()指向末尾后一位置。
STL迭代器是访问容器元素的统一接口,本质是一个类对象,行为类似指针——能解引用(*)、自增(++)、比较(==/!=),但屏蔽了底层存储细节。它把“怎么存”和“怎么用”分开,让算法(如sort、find)不依赖具体容器类型。
不同容器内存布局不同(vector连续,list链式,map红黑树),但只要提供符合要求的迭代器,同一个for_each就能遍历它们。标准库算法只认迭代器操作,不管背后是数组还是节点指针。
vector::iterator ),通常通过begin()/end()获取end()返回的是“末尾后一位置”的迭代器,不指向有效元素,仅作循环边界假设vector
for (auto it = v.begin(); it != v.end(); ++it) { cout
for (const auto& x : v) { cout —— 编译器自动用迭代器实现,更简洁安全
for_each(v.begin(), v.end(), [](int x) { cout
迭代器按功能分五类(输入、输出、前向、双向、随机访问),vector支持随机访问(可it += 2),list只支持双向(只能++/--)。
vector扩容时所有迭代器失效;erase后被删位置及之后的迭代器失效it = v.erase(it)之外的++it写法,尤其在循环中删除元素时cbegin()/cend()获取const迭代器,确保只读访问查文档看其迭代器类别,或用std::is_same_v检测(编译期):
std::is_same_v::iterator::iterator_category, std::random_access_iterator_tag> 返回true
std::is_same_v::itera
tor::iterator_category, std::bidirectional_iterator_tag> 返回true
不复杂但容易忽略。