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