本文為《C++ Primer》學習筆記系列第 42 篇,開啟「STL 實踐與分析」專題的「再談迭代器」三部曲之首篇(上)。旨在系統梳理 STL 迭代器的核心概念、分類體系、基本操作及其與容器、算法的協作機制,為後續進階主題(iostream 迭代器、反向迭代器、const 迭代器)奠定基礎。
istream_iterator)ostream_iterator)forward_list)list, set, map)vector, deque, array)iterator_traits 統一獲取迭代器的 value_type, difference_type, pointer, reference, iterator_category,支撐泛型算法根據迭代器類別優化實現(如 advance, distance)。// 容器定義迭代器類型
vector<int>::iterator it;
vector<int>::const_iterator cit;
vector<int>::reverse_iterator rit;
// 獲取始末迭代器
auto begin = vec.begin(); // 指向首元素
auto end = vec.end(); // 指向尾後位置(左閉右開區間 [begin, end))
// 遍歷模式
for (auto it = vec.begin(); it != vec.end(); ++it) { /* ... */ }
// C++11 範圍 for
for (auto &elem : vec) { /* ... */ }
修改容器結構(插入/刪除/擴容)可能導致迭代器失效:
reserve 可避免擴容失效。掌握本篇基礎後,建議依次閱讀第 43 篇(iostream 迭代器進階)、第 44 篇(反向迭代器習題實戰)、第 45 篇(const 迭代器與容器操作),並結合《Effective STL》條款 26~29 深化理解。