iterator เป็นอ็อบเจ็กต์เหมือนกับตัวชี้ที่ใช้ในการวนซ้ำองค์ประกอบของคอนเทนเนอร์ ข้อได้เปรียบหลักของการใช้ตัววนซ้ำคือการสร้างอินเทอร์เฟซทั่วไปและทำให้อัลกอริธึมปลอดจากประเภทของคอนเทนเนอร์ที่ใช้ในการติดตั้ง
ในไลบรารีมาตรฐาน C++ มีประเภทของตัววนซ้ำ -
- ตัววนซ้ำไปข้างหน้า
- ตัววนซ้ำสองทิศทาง
- ตัววนซ้ำอินพุต
- ตัวทำซ้ำเอาต์พุต
- ตัววนซ้ำการเข้าถึงแบบสุ่ม
โปรแกรมคือการตรวจสอบว่าตัววนซ้ำใดข้างต้นถูกใช้โดยโครงสร้างข้อมูล
มีปัจจัยบางประการที่อาจเป็นประโยชน์ในการพิจารณาประเภทของตัววนซ้ำที่ใช้
-
พิมพ์ดีด ส่งคืนข้อมูลการระบุประเภทที่รันไทม์
-
ลักษณะการวนซ้ำ กำหนดคุณสมบัติที่ iterator มี
-
หมวดหมู่ตัววนซ้ำ ใช้เพื่อกำหนดหมวดหมู่ที่พวกเขากำหนดให้ตัววนซ้ำอยู่
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; template <class T> string iteratortype(T iterator){ if (typeid(typename iterator_traits<T>::iterator_category) == typeid(input_iterator_tag)) return "Input"; else if (typeid(typename iterator_traits<T>::iterator_category) == typeid(output_iterator_tag)) return "Output"; else if (typeid(typename iterator_traits<T>::iterator_category) == typeid(forward_iterator_tag)) return "Forward"; else if (typeid(typename iterator_traits<T>::iterator_category) == typeid(bidirectional_iterator_tag)) return "Bidirectional"; else if (typeid(typename iterator_traits<T>::iterator_category) == typeid(random_access_iterator_tag)) return "Random_Access"; return "Missing"; } int main(){ vector<int> vec; auto iter = vec.begin(); cout <<iteratortype(iter) << " Iterator\n"; return 0; }
ผลลัพธ์
Random_Access Iterator