Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Input Iterators ใน C++ : ตัวอย่างและคำอธิบาย


ในบทช่วยสอนนี้ เราจะมาทำความเข้าใจ 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 ครับ