ผลต่างระหว่างรุ่นของ "Psl/stl intro"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 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

Template

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

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

algorithm มาตรฐาน