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

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 14: แถว 14:
 
ด้านล่างเป็นโค้ดที่ใช้ array
 
ด้านล่างเป็นโค้ดที่ใช้ array
  
<syntaxhighligh lang="cpp">
+
<syntaxhighlight lang="cpp">
 
   int a[100];
 
   int a[100];
 
   int x = 0;
 
   int x = 0;
แถว 27: แถว 27:
  
 
ลองเปรียบเทียบกับโค้ดที่ใช้ vector
 
ลองเปรียบเทียบกับโค้ดที่ใช้ vector
<syntaxhighligh lang="cpp">
+
<syntaxhighlight lang="cpp">
 
   vector<int> a(100);
 
   vector<int> a(100);
 
   int x = 0;
 
   int x = 0;

รุ่นแก้ไขเมื่อ 20:38, 11 กุมภาพันธ์ 2561

หน้านี้เป็นส่วนหนึ่งของวิชา Problem solving lab

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

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

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

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

ด้านล่างเป็นโค้ดที่ใช้ 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

Template

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

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

algorithm มาตรฐาน