首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 迭代器核心機制:概念、分類、操作與容器遍歷最佳實踐

     編輯:C++ 入門

迭代器:統一容器存取抽象

現代 C++ 傾向使用迭代器而非下標存取容器元素,即使支援下標的 vector 亦然。標準庫為每種容器定義專屬迭代器型別,提供比下標更通用的方法:所有標準容器皆定義迭代器型別,僅少數支援下標。

容器的 iterator 型別


std::vector<int>::iterator iter;  // 定義 vector 迭代器變數

每個標準容器定義名為 iterator 的成員型別。術語區分:

  • 迭代器(概念):支援特定行為(遍歷、存取元素)的型別統稱。
  • iterator 型別(具體):特定容器定義的具體型別,如 vector<int>::iterator。

begin() 與 end() 操作

  • begin():回傳指向第一個元素的迭代器。容器為空時與 end() 相同。
  • end():回傳指向尾後位置的迭代器,不指向實際元素,作為哨兵標記遍歷結束。

std::vector<int> ivec = {1,2,3};
auto iter = ivec.begin();  // 指向 1
// *iter 即 ivec[0]

迭代器核心操作

注意:end() 回傳的迭代器不可解參考、不可遞增。

遍歷慣用法


// 傳統 for 迴圈
for (auto iter = vec.begin(); iter != vec.end(); ++iter) {
    std::cout << *iter << ' ';
}

// C++11 範圍 for(推薦,自動使用迭代器)
for (const auto& elem : vec) {
    std::cout << elem << ' ';
}

// 演算法配合迭代器
std::sort(vec.begin(), vec.end());
auto pos = std::find(vec.begin(), vec.end(), target);

迭代器分類(標籤)

標準庫定義五類迭代器標籤,功能遞增:

  1. input_iterator_tag:單向唯讀(如 istream_iterator)
  2. output_iterator_tag:單向唯寫(如 ostream_iterator)
  3. forward_iterator_tag:單向讀寫、多遍(如 forward_list)
  4. bidirectional_iterator_tag:雙向讀寫(如 list, map)
  5. random_access_iterator_tag:隨機存取、算術運算(如 vector, deque, array)

演算法依迭代器類別要求不同功能(如 sort 需隨機存取迭代器)。

const 迭代器與常量正確性

  • const_iterator:指向 const 元素,不可修改元素值。
  • cbegin()/cend():回傳 const_iterator(C++11)。
  • 範圍 for 自動推導 const 正確性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作語法語義
解參考*iter存取迭代器指向的元素(可讀寫,視迭代器類別而定)
前置遞增++iter移動到下一個元素,回傳遞增後的迭代器
後置遞增iter++移動到下一個元素,回傳遞增前的副本
相等比較iter1 == iter2指向同一元素則為真
不等比較iter1 != iter2指向不同元素則為真