ผลต่างระหว่างรุ่นของ "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