Psl/stl intro

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
หน้านี้เป็นส่วนหนึ่งของวิชา Problem solving lab

หน้านี้จะอธิบายการใช้งาน Standard Template Library แบบคร่าว ๆ ไลบรารีดังกล่าวจะประกอบไปด้วยโครงสร้างข้อมูลและอัลกอริทึมพื้นฐาน รวมไปถึงฟังก์ชันเบ็ดเตล็ดต่าง ๆ

ด้านล่างเป็นลิงก์สำหรับอ่านรายละเอียดและใช้อ้างอิงเกี่ยวกับ STL

แรงบันดาลใจของรูปแบบ container และ iterator

การออกแบบ "interface" หรือรูปแบบการใช้งานของ STL พยายามจะล้อกับการใช้งาน array โดยผ่านทาง pointer ซึ่งเป็นรูปแบบที่ใช้ประจำในภาษา C ดังตัวอย่างเปรียบเทียบด้านล่าง

ด้านล่างเป็นโค้ดที่ใช้ array

<syntaxhighligh lang="cpp">

 int a[100];
 int x = 0;
 
 int* i = a;
 while(i != (a+100)) {
   *i = x;
   cout << *i;
   i++;
 }

</syntaxhighlight>

ลองเปรียบเทียบกับโค้ดที่ใช้ vector <syntaxhighligh lang="cpp">

 vector<int> a(100);
 int x = 0;
 vector<int>::iterator i = a.begin();
 while(i != a.end()) {
   *i = x;
   cout << *i;
   i++;
 }

</syntaxhighlight>

ความแตกต่างในการใช้งานมีแค่การเรียก a.begin() กับ a (แทนตัวชี้ไปยังข้อมูลตัวแรก) และ a.end() แทน a+100 (แทนตัวชี้ไปยังข้อมูลที่ เลย ตัวสุดท้ายไปหนึ่งตำแหน่ง)

เรานิยมเรียกโครงสร้างข้อมูลว่า container ส่วนตัวแปร i ที่มี type เป็น vector<int>::iterator นั้นจะเรียกว่า iterator หรือตัววิ่งนั่นเอง

ในส่วนถัด ๆ ไปเราจะพิจารณาการใช้งาน container และ iterator

Template

การใช้งานพื้นฐาน: container และ iterator

ตัวอย่าง container ที่นิยมใช้

algorithm มาตรฐาน