ผลต่างระหว่างรุ่นของ "Psl/stl intro"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
แถว 9: | แถว 9: | ||
== แรงบันดาลใจของรูปแบบ container และ iterator == | == แรงบันดาลใจของรูปแบบ 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> | ||
+ | |||
+ | ความแตกต่างในการใช้งานมีแค่การเรียก <tt>a.begin()</tt> กับ <tt>a</tt> (แทนตัวชี้ไปยังข้อมูลตัวแรก) และ <tt>a.end()</tt> แทน <tt>a+100</tt> (แทนตัวชี้ไปยังข้อมูลที่ '''เลย''' ตัวสุดท้ายไปหนึ่งตำแหน่ง) | ||
+ | |||
+ | เรานิยมเรียกโครงสร้างข้อมูลว่า container ส่วนตัวแปร i ที่มี type เป็น <tt>vector<int>::iterator</tt> นั้นจะเรียกว่า iterator หรือตัววิ่งนั่นเอง | ||
+ | |||
+ | ในส่วนถัด ๆ ไปเราจะพิจารณาการใช้งาน container และ iterator | ||
== Template == | == Template == |
รุ่นแก้ไขเมื่อ 20:38, 11 กุมภาพันธ์ 2561
- หน้านี้เป็นส่วนหนึ่งของวิชา 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