ข้ามไปเนื้อหา

ไลบรารีแม่แบบมาตรฐานของภาษาซีพลัสพลัส/vector

จาก วิกิตำรา

vector เป็น array ที่สามารถเพิ่มขนาดได้ มีความสามารถ random access และสามารถดำเนินการกับข้อมูลด้านปลายได้ในเวลาคงที่

หากได้อ่าน deque มาแล้ว จะเห็นได้ว่า vector มีความสามารถด้อยกว่า เนื่องจาก deque มีความสามารถเหมือน vector ทุกประการ แต่สามารถเพิ่ม/ลบข้อมูลทางด้านหน้าได้ด้วย อย่างไรก็ตาม หากโปรแกรมที่จะเขียนไม่ได้มีการดำเนินการกับข้อมูลด้านหน้าก็จะนิยมใช้ vector มากกว่า เนื่องจากในทางปฏิบัติ deque จะใช้พื้นที่มากกว่า vector

การใช้งานและการประกาศตัวแปร

[แก้ไข | แก้ไขต้นฉบับ]

ต้องนำเข้า header file "vector" โดย #include <vector>

ให้ T คือชนิดข้อมูลใดๆ และ var คือชื่อตัวแปร มีรูปแบบการประกาศตัวแปร vector โดย vector <T> var;

คำอธิบาย เป็นการเพิ่มข้อมูลชนิด T ลงทางด้านปลายของ vector ใช้เวลา
พารามิเตอร์ มีเพียงตัวเดียวคือข้อมูลชนิด T ที่ต้องการจะใส่ลง vector ทางด้านปลาย
คืนค่า ไม่มี
ฟังก์ชั่นต้นแบบ void push_back(T);
ข้อควรระวัง ไม่มี
คำอธิบาย เป็นการลบข้อมูลชนิด T ทางด้านปลายของ vector ใช้เวลา
พารามิเตอร์ ไม่มี
คืนค่า ไม่มี
ฟังก์ชั่นต้นแบบ void pop_back();
ข้อควรระวัง หาก size ของ vector เป็น 0 จะเกิด error
คำอธิบาย เป็นการหาค่าที่อยู่ด้านหน้าของ vector ใช้เวลา
พารามิเตอร์ ไม่มี
คืนค่า ข้อมูลชนิด T ที่อยู่ด้านหน้าของ vector
ฟังก์ชั่นต้นแบบ T front();
ข้อควรระวัง หาก size ของ vector เป็น 0 จะเกิด error
คำอธิบาย เป็นการหาค่าที่อยู่ด้านปลายของ vector ใช้เวลา
พารามิเตอร์ ไม่มี
คืนค่า ข้อมูลชนิด T ที่อยู่ด้านปลายของ vector
ฟังก์ชั่นต้นแบบ T back();
ข้อควรระวัง หาก size ของ vector เป็น 0 จะเกิด error
คำอธิบาย เป็นการหาว่าขณะนี้ vector มีขนาดเท่าไหร่ ใช้เวลา
พารามิเตอร์ ไม่มี
คืนค่า จำนวนเต็ม บอกถึงขนาดของ vector
ฟังก์ชั่นต้นแบบ int size();
ข้อควรระวัง ไม่มี
คำอธิบาย ไม่มี
พารามิเตอร์ ไม่มี
คืนค่า
  • ค่า true เมื่อ vector ว่าง (ขนาดเป็น 0)
  • ค่า false เมื่อ vector ไม่ว่าง (ขนาดมากกว่า 0)
ฟังก์ชั่นต้นแบบ bool empty();
ข้อควรระวัง ไม่มี
คำอธิบาย เป็นการหาค่าของข้อมูลช่องที่ต้องการแบบ random access ซึ่งใช้เวลา O(1)

ตัวอย่างการใช้งาน ดูที่นี่

พารามิเตอร์ มีเพียงตัวเดียวคือ จำนวนเต็มในช่วง แสดงถึงช่องที่ต้องการหาค่า
คืนค่า ข้อมูลชนิด T ที่ต้องการหาค่า
ฟังก์ชั่นต้นแบบ T operator[](int);
ข้อควรระวัง ไม่มี

ตัวอย่างโค้ด

[แก้ไข | แก้ไขต้นฉบับ]
#include <cstdio>
#include <vector>

using namespace std;

struct ST{
    int a, b;
};

int main(){
    vector <int> V;                        // []
    V.push_back(13);                       // [13]
    V.push_back(12);                       // [13,12]
    V.pop_back();                          // [13]
    V.push_back(5);                        // [13,5]
    
    printf("%d", V.back());                // => 5
    printf("%d", V.front());               // => 13
    
    for(int i = 0; i < 4; i++)
        V.push_back(i);                    // [13,5,0,1,2,3]
    
    for(int i = 0; i < (int)V.size(); i++)
        printf("%d ", V[i]);               // => 13 5 0 1 2 3
                                        
    while(not V.empty()) V.pop_back();     // []
                                        
    V.pop_back()                           // => Error
    V.front()                              // => Error
    V.back()                               // => Error
                                        
    ST tmp;                                
    vector <ST> T;                         // []
                                        
    tmp.a = 5;                             
    tmp.b = 3;                             
                                        
    T.push_back(tmp);                      // [(5,3)]
                                        
    printf("%d\n", T.front().b);           // => 3
    
    return 0;
}
Clipboard

เรื่องที่ต้องทำ:
constructor

พัฒนา 75% ตั้งแต่ 21 กุมภาพันธ์ 2556 stack
พัฒนา 75% ตั้งแต่ 21 กุมภาพันธ์ 2556 queue
พัฒนา 75% ตั้งแต่ 21 กุมภาพันธ์ 2556 priority_queue
พัฒนา 75% ตั้งแต่ 21 กุมภาพันธ์ 2556 deque
พัฒนา 75% ตั้งแต่ 21 กุมภาพันธ์ 2556 vector
พัฒนา 25% ตั้งแต่ 21 กุมภาพันธ์ 2556 map
พัฒนา 0% ตั้งแต่ 21 กุมภาพันธ์ 2556 set