ผลต่างระหว่างรุ่นของ "Psl/stl intro"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
แถว 10: | แถว 10: | ||
== แรงบันดาลใจของรูปแบบ container และ iterator == | == แรงบันดาลใจของรูปแบบ container และ iterator == | ||
− | การออกแบบ "interface" หรือรูปแบบการใช้งานของ STL พยายามจะล้อกับการใช้งาน array โดยผ่านทาง pointer ซึ่งเป็นรูปแบบที่ใช้ประจำในภาษา C | + | การออกแบบ "interface" หรือรูปแบบการใช้งานของ STL พยายามจะล้อกับการใช้งาน array โดยผ่านทาง pointer ซึ่งเป็นรูปแบบที่ใช้ประจำในภาษา C (นิยมเรียกว่า [https://en.wikipedia.org/wiki/Iterator_pattern iterator pattern]) พิจารณาตัวอย่างเปรียบเทียบด้านล่าง |
ด้านล่างเป็นโค้ดที่ใช้ array | ด้านล่างเป็นโค้ดที่ใช้ array |
รุ่นแก้ไขเมื่อ 20:39, 11 กุมภาพันธ์ 2561
- หน้านี้เป็นส่วนหนึ่งของวิชา Problem solving lab
หน้านี้จะอธิบายการใช้งาน Standard Template Library แบบคร่าว ๆ ไลบรารีดังกล่าวจะประกอบไปด้วยโครงสร้างข้อมูลและอัลกอริทึมพื้นฐาน รวมไปถึงฟังก์ชันเบ็ดเตล็ดต่าง ๆ
ด้านล่างเป็นลิงก์สำหรับอ่านรายละเอียดและใช้อ้างอิงเกี่ยวกับ STL
เนื้อหา
แรงบันดาลใจของรูปแบบ container และ iterator
การออกแบบ "interface" หรือรูปแบบการใช้งานของ STL พยายามจะล้อกับการใช้งาน array โดยผ่านทาง pointer ซึ่งเป็นรูปแบบที่ใช้ประจำในภาษา C (นิยมเรียกว่า iterator pattern) พิจารณาตัวอย่างเปรียบเทียบด้านล่าง
ด้านล่างเป็นโค้ดที่ใช้ array
int a[100];
int x = 0;
int* i = a;
while(i != (a+100)) {
*i = x;
cout << *i;
i++;
}
ลองเปรียบเทียบกับโค้ดที่ใช้ vector
vector<int> a(100);
int x = 0;
vector<int>::iterator i = a.begin();
while(i != a.end()) {
*i = x;
cout << *i;
i++;
}
ความแตกต่างในการใช้งานมีแค่การเรียก a.begin() กับ a (แทนตัวชี้ไปยังข้อมูลตัวแรก) และ a.end() แทน a+100 (แทนตัวชี้ไปยังข้อมูลที่ เลย ตัวสุดท้ายไปหนึ่งตำแหน่ง)
เรานิยมเรียกโครงสร้างข้อมูลว่า container ส่วนตัวแปร i ที่มี type เป็น vector<int>::iterator นั้นจะเรียกว่า iterator หรือตัววิ่งนั่นเอง
ในส่วนถัด ๆ ไปเราจะพิจารณาการใช้งาน container และ iterator