Iterator (ตัววนซ้ำ) เป็นออบเจ็กต์ที่คล้ายตัวชี้ (pointer) ใช้สำหรับวนซ้ำผ่านสมาชิกของคอนเทนเนอร์ ข้อได้เปรียบหลักของการใช้ iterator คือการสร้างอินเทอร์เฟซร่วมกัน ทำให้อัลกอริทึมไม่ขึ้นอยู่กับประเภทของคอนเทนเนอร์ที่ใช้
ในไลบรารีมาตรฐาน C++ มีประเภทของ Iterator ดังนี้:
- Forward iterator
- Bidirectional iterator
- Input iterator
- Output iterator
- Random Access iterator
โปรแกรมนี้ใช้เพื่อตรวจสอบว่าคอนเทนเนอร์ใช้ iterator ประเภทใด
มีปัจจัยบางอย่างที่ช่วยกำหนดประเภทของ iterator:
typeid ส่งคืนข้อมูลระบุประเภทในขณะรันโปรแกรม (runtime)
iterator traits กำหนดคุณสมบัติที่ iterator มีอยู่
iterator category ใช้กำหนดหมวดหมู่ที่ 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