ในบทช่วยสอนนี้ เราจะมาทำความเข้าใจ Input Iterators ใน C++ Standard Template Library (STL) ครับ
Input Iterators เป็นหนึ่งใน 5 ประเภทของ Iterator ใน STL (อีก 4 ประเภทคือ Output, Forward, Bidirectional, Random Access) ถือเป็น Iterator ที่ อ่อนแอและเรียบง่ายที่สุด ใช้งานหลักคือสำหรับ การอ่านข้อมูลแบบลำดับ (Sequential Input) เช่น การอ่านจากคีย์บอร์ด ไฟล์ หรือ Stream ต่างๆ โดยแต่ละค่าจะถูกอ่านครั้งเดียวแล้ว Iterator จะเคลื่อนไปยังค่าถัดไป
คุณสมบัติหลักของ Input Iterator
- รองรับการอ่านค่า (
*it) และการเคลื่อนไปข้างหน้า (++it) - ไม่รองรับ การเคลื่อนย้อนหลัง (
--it) หรือการเข้าถึงแบบสุ่ม (it + n) - สามารถอ่านค่าได้เพียงครั้งเดียวต่อตำแหน่ง (Single-pass)
- ใช้กับอัลกอริทึมที่อ่านข้อมูลครั้งเดียว เช่น
std::find,std::copy(source)
ตัวอย่างโค้ด
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v1 = { 1, 2, 3, 4, 5 };
// ประกาศ Iterator แบบปกติ (Vector ให้ Random Access Iterator ซึ่งรองรับ Input Iterator operations)
vector<int>::iterator i1;
// วนลูปผ่านทุกตัวโดยใช้ Iterator
for (i1 = v1.begin(); i1 != v1.end(); ++i1) {
// อ่านค่าผ่าน Iterator (Dereference)
cout << (*i1) << " ";
}
return 0;
}
ผลลัพธ์ (Output)
1 2 3 4 5
หมายเหตุเพิ่มเติม
แม้ตัวอย่างจะใช้ vector::iterator (ซึ่งเป็น Random Access Iterator ที่แข็งแกร่งกว่า) แต่โค้ดนี้แสดงหลักการทำงานพื้นฐานของ Input Iterator ได้ดี คือ Dereference เพื่ออ่านค่า และ Increment เพื่อไปยังข้อมูลถัดไป ในทางปฏิบัติ Input Iterator จริงๆ จะพบได้ที่ istream_iterator สำหรับอ่านจาก Stream ครับ