เวกเตอร์ใน C++ ไลบรารีเทมเพลตมาตรฐาน (STL) พร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
เวกเตอร์ใน C++ เป็นอาร์เรย์แบบไดนามิกจากไลบรารีเทมเพลตมาตรฐาน (Standard Template Library) ที่ปรับขนาดตัวเองโดยอัตโนมัติเมื่อมีการเพิ่มหรือลบองค์ประกอบ โดยจัดเก็บรายการต่างๆ ไว้ในหน่วยความจำที่ต่อเนื่องกัน ทำให้นักโปรแกรมสามารถเข้าถึงและวนซ้ำรายการเหล่านั้นได้โดยใช้ตัววนซ้ำ (iterator)

อะไรคือ a C++ เวกเตอร์?
A C++ เวกเตอร์คืออาร์เรย์แบบไดนามิกที่สามารถปรับขนาดตัวเองได้โดยอัตโนมัติ การปรับขนาดจะเกิดขึ้นหลังจากเพิ่มหรือลบองค์ประกอบออกจากเวกเตอร์แล้ว พื้นที่จัดเก็บจะถูกจัดการโดยอัตโนมัติโดยคอนเทนเนอร์ องค์ประกอบของเวกเตอร์จะถูกจัดเก็บในพื้นที่จัดเก็บแบบต่อเนื่อง ซึ่งช่วยให้ C++ โปรแกรมเมอร์สามารถเข้าถึงและเคลื่อนผ่านองค์ประกอบเวกเตอร์โดยใช้ตัววนซ้ำ
การเพิ่มข้อมูลใหม่ลงในเวกเตอร์จะทำที่ส่วนท้ายของเวกเตอร์ ซึ่งใช้เวลาเชิงอนุพันธ์ การลบองค์ประกอบออกจากเวกเตอร์ใช้เวลาคงที่ เนื่องจากไม่จำเป็นต้องปรับขนาดเวกเตอร์ การเพิ่มหรือลบองค์ประกอบที่ส่วนต้นของเวกเตอร์ใช้เวลาเชิงเส้น
ก่อนที่จะเขียนโค้ดโดยใช้เวกเตอร์ การรู้ว่าเมื่อใดจึงเหมาะสมที่จะใช้เวกเตอร์เป็นคอนเทนเนอร์นั้นจะเป็นประโยชน์
เมื่อใดจึงควรใช้เวกเตอร์?
A C++ เวกเตอร์ควรใช้ภายใต้สถานการณ์ต่อไปนี้:
- เมื่อต้องรับมือกับองค์ประกอบข้อมูลที่เปลี่ยนแปลงอย่างต่อเนื่อง
- หากไม่ทราบขนาดของข้อมูลก่อนเริ่มใช้งาน เวกเตอร์จะไม่ขอให้คุณกำหนดขนาดสูงสุดของคอนเทนเนอร์
วิธีการเตรียมใช้งานเวกเตอร์ในรูปแบบ C++
ไวยากรณ์ของเวกเตอร์ใน C++ คือ:
vector <data-type> name (items)
ดังที่แสดงไว้ข้างต้น เราจะเริ่มต้นด้วยคำสำคัญเวกเตอร์
- การขอ ประเภทข้อมูล คือชนิดข้อมูลขององค์ประกอบที่จะจัดเก็บในเวกเตอร์
- การขอ พร้อมชื่อ คือชื่อของเวกเตอร์หรือองค์ประกอบข้อมูล
- การขอ รายการ ระบุจำนวนองค์ประกอบสำหรับข้อมูลเวกเตอร์ พารามิเตอร์นี้เป็นตัวเลือก
เมื่อมีเวกเตอร์อยู่แล้ว ตัววนซ้ำจะให้วิธีการคล้ายตัวชี้เพื่อเลื่อนไปตามองค์ประกอบต่างๆ ของเวกเตอร์นั้น
ตัววนซ้ำ
จุดประสงค์ของตัววนซ้ำ (iterator) คือการช่วยให้เราเข้าถึงองค์ประกอบที่จัดเก็บอยู่ในเวกเตอร์ มันเป็นวัตถุที่ทำงานคล้ายกับตัวชี้ ต่อไปนี้คือตัววนซ้ำทั่วไปที่รองรับโดยเวกเตอร์ C++ เวกเตอร์:
- vector::begin(): มันให้ตัววนซ้ำที่ชี้ไปที่องค์ประกอบแรกของเวกเตอร์
- เวกเตอร์::เอนด์(): มันให้ตัววนซ้ำที่ชี้ไปยังองค์ประกอบที่ผ่านมาถึงจุดสิ้นสุดของเวกเตอร์
- เวกเตอร์::cbegin(): มันเหมือนกับ vector::begin() แต่ไม่มีความสามารถในการแก้ไของค์ประกอบต่างๆ
- เวกเตอร์::cend(): มันทำงานเหมือนกับ vector::end() แต่ไม่สามารถแก้ไของค์ประกอบของเวกเตอร์ได้
ตัวอย่างต่อไปนี้จะเติมข้อมูลลงในเวกเตอร์ จากนั้นจึงวนลูปผ่านเวกเตอร์นั้นโดยใช้ตัววนซ้ำทั้งแบบเปลี่ยนแปลงได้และแบบคงที่
1 ตัวอย่าง
#include <iostream> #include <vector> using namespace std; int main() { vector<int> nums; for (int a = 1; a <= 5; a++) nums.push_back(a); cout << "Output from begin and end: "; for (auto a = nums.begin(); a != nums.end(); ++a) cout << *a << " "; cout << "\nOutput from cbegin and cend: "; for (auto a = nums.cbegin(); a != nums.cend(); ++a) cout << *a << " "; return 0; }
Output:
นี่คือภาพหน้าจอของรหัส:
Code คำอธิบาย:
- รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเรา มันจะช่วยให้เราอ่านและเขียนไปยังคอนโซลได้
- รวมไฟล์ส่วนหัวเวกเตอร์ไว้ในโค้ดของเรา มันจะช่วยให้เราทำงานกับเวกเตอร์ได้ C++.
- รวมเนมสเปซมาตรฐานเพื่อใช้คลาสและฟังก์ชันโดยไม่ต้องเรียกมัน
- เรียกใช้ฟังก์ชัน main() ภายในที่ควรเพิ่มตรรกะของโปรแกรม
- { เป็นจุดเริ่มต้นของส่วนเนื้อหาของฟังก์ชัน main()
- ประกาศเวกเตอร์ชื่อ nums เพื่อจัดเก็บชุดของจำนวนเต็ม
- สร้างลูป for เพื่อช่วยในการวนซ้ำผ่านเวกเตอร์ ตัวแปรจะช่วยให้เราวนซ้ำผ่านองค์ประกอบของเวกเตอร์ ตั้งแต่องค์ประกอบที่ 1 ถึงองค์ประกอบที่ 5
- ดันองค์ประกอบเข้าไปในเวกเตอร์ num จากด้านหลัง สำหรับการวนซ้ำแต่ละครั้ง ค่านี้จะเพิ่มค่าปัจจุบันของตัวแปร a ลงในเวกเตอร์ ซึ่งก็คือ 1 ถึง 5
- พิมพ์ข้อความบนคอนโซล
- ใช้ตัวแปรตัววนซ้ำ a เพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums ตั้งแต่ต้นจนจบองค์ประกอบที่ผ่านมา โปรดทราบว่าเรากำลังใช้ตัววนซ้ำ vector::begin() และ vector::end()
- พิมพ์ค่าที่ชี้ไปที่ตัวแปรตัววนซ้ำ a บนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
- พิมพ์ข้อความบนคอนโซล \n คืออักขระขึ้นบรรทัดใหม่ โดยเลื่อนเคอร์เซอร์ไปที่บรรทัดใหม่เพื่อพิมพ์จากตรงนั้น
- ใช้ตัวแปรอิเทอเรเตอร์เพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums ตั้งแต่ต้นจนถึงองค์ประกอบที่เลยจุดสิ้นสุดไปแล้ว โปรดสังเกตว่าเราใช้อิเทอเรเตอร์ vector::cbegin() และ vector::cend()
- พิมพ์ค่าที่ชี้ไปที่ตัวแปรตัววนซ้ำ a บนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
- ฟังก์ชั่นหลักควรส่งคืนค่าหากโปรแกรมทำงานได้สำเร็จ
- ส่วนท้ายของฟังก์ชัน main()
ตัวปรับเปลี่ยน
ตัวแก้ไขใช้สำหรับเปลี่ยนความหมายของประเภทข้อมูลที่ระบุ นี่คือตัวแก้ไขทั่วไปใน C++:
- เวกเตอร์::push_back(): ตัวแก้ไขนี้จะผลักองค์ประกอบจากด้านหลัง
- เวกเตอร์::แทรก(): สำหรับการแทรกรายการใหม่ลงในเวกเตอร์ในตำแหน่งที่ระบุ
- เวกเตอร์::pop_back(): ตัวแก้ไขนี้จะลบองค์ประกอบเวกเตอร์ออกจากด้านหลัง
- เวกเตอร์::ลบ(): ใช้สำหรับลบองค์ประกอบต่างๆ ออกจากตำแหน่งที่ระบุ
- เวกเตอร์::ชัดเจน(): มันจะลบองค์ประกอบเวกเตอร์ทั้งหมด
ตัวอย่างต่อไปนี้จะนำตัวปรับแต่งเหล่านี้มาใช้ตามลำดับเพื่อดูว่าเวกเตอร์เปลี่ยนแปลงอย่างไร
2 ตัวอย่าง
#include <iostream> #include <vector> using namespace std; int main() { vector<int> nums; nums.assign(5, 1); cout << "Vector contents: "; for (int a = 0; a < nums.size(); a++) cout << nums[a] << " "; nums.push_back(2); int n = nums.size(); cout << "\nLast element: " << nums[n - 1]; nums.pop_back(); cout << "\nVector contents: "; for (int a = 0; a < nums.size(); a++) cout << nums[a] << " "; nums.insert(nums.begin(), 7); cout << "\nFirst element: " << nums[0]; nums.clear(); cout << "\nSize after clear(): " << nums.size(); }
Output:
นี่คือภาพหน้าจอของรหัส:
Code คำอธิบาย:
- รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
- รวมไฟล์ส่วนหัวเวกเตอร์ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
- รวมเนมสเปซมาตรฐานเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
- เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมเข้าไปในเนื้อความ
- จุดเริ่มต้นของฟังก์ชัน main()
- ประกาศเวกเตอร์ชื่อ nums เพื่อเก็บค่าจำนวนเต็ม
- เก็บ 5 องค์ประกอบไว้ในตัวเลขเวกเตอร์ แต่ละตัวมีค่าเท่ากับ 1
- พิมพ์ข้อความบนคอนโซล
- ใช้ตัวแปรตัววนซ้ำ a เพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums
- พิมพ์ค่าของ vector nums บนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
- เพิ่มค่า 2 ต่อท้ายตัวเลขเวกเตอร์
- ประกาศตัวแปรจำนวนเต็ม n เพื่อจัดเก็บขนาดของตัวเลขเวกเตอร์
- พิมพ์ค่าสุดท้ายของตัวเลขเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ มันควรคืนค่า 2
- ลบองค์ประกอบสุดท้ายออกจากตัวเลขเวกเตอร์ 2 ตัวจะถูกลบออก
- พิมพ์ข้อความบนคอนโซล \n เลื่อนเคอร์เซอร์ไปที่บรรทัดใหม่เพื่อพิมพ์ข้อความที่นั่น
- ใช้ตัวแปรตัววนซ้ำ a เพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums
- พิมพ์ค่าของ vector nums บนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
- ใส่ค่า 7 ที่จุดเริ่มต้นของตัวเลขเวกเตอร์
- พิมพ์ค่าแรกของตัวเลขเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ มันควรกลับมา 7
- ลบองค์ประกอบทั้งหมดออกจากตัวเลขเวกเตอร์
- พิมพ์ขนาดของเวกเตอร์ num ควบคู่ไปกับข้อความอื่นหลังจากล้างเนื้อหาทั้งหมดแล้ว มันควรส่งคืน 0
- ส่วนท้ายของฟังก์ชัน main()
ความจุ
ใช้สิ่งต่อไปนี้ ฟังก์ชั่น เพื่อกำหนดความจุของเวกเตอร์:
- ขนาด() – ฟังก์ชันนี้จะส่งคืนจำนวนรายการในเวกเตอร์
- Max_size() – ฟังก์ชันนี้จะส่งคืนจำนวนรายการสูงสุดที่เวกเตอร์สามารถจัดเก็บได้
- ความจุ() – ฟังก์ชันนี้จะส่งคืนปริมาณพื้นที่จัดเก็บที่จัดสรรให้กับเวกเตอร์
- ปรับขนาด() – ฟังก์ชันนี้จะปรับขนาดคอนเทนเนอร์ให้สามารถบรรจุรายการได้ n รายการ หากขนาดปัจจุบันของเวกเตอร์มากกว่า n รายการที่อยู่ด้านหลังจะถูกลบออกจากเวกเตอร์ หากขนาดปัจจุบันของเวกเตอร์น้อยกว่า n รายการเพิ่มเติมจะถูกเพิ่มเข้าไปที่ด้านหลังของเวกเตอร์
- ว่างเปล่า() – ฟังก์ชันนี้จะคืนค่า true หากเวกเตอร์ว่างเปล่า และคืนค่า false หากเวกเตอร์ไม่ว่างเปล่า
ตัวอย่างสุดท้ายนี้แสดงการรายงานและปรับการจัดเก็บเวกเตอร์โดยใช้ฟังก์ชันความจุข้างต้น
3 ตัวอย่าง
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vector1; for (int x = 1; x <= 10; x++) vector1.push_back(x); cout << "Vector size: " << vector1.size()<< endl; cout << "Vector capacity: " << vector1.capacity() << endl; cout << "Maximum size of vector: " << vector1.max_size()<< endl; vector1.resize(5); cout << "Vector size after resizing: " << vector1.size() << endl; if (vector1.empty() == false) cout << "Vector is not empty"<<endl; else cout << "Vector is empty"<<endl; return 0; }
Output:
นี่คือภาพหน้าจอของรหัส:
Code คำอธิบาย:
- รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชัน
- รวมไฟล์ส่วนหัวเวกเตอร์ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
- รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
- เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
- สร้างเวกเตอร์ชื่อ vector1 เพื่อเก็บจำนวนเต็ม
- ใช้ for loop เพื่อสร้างตัวแปร x ที่มีค่าตั้งแต่ 1 ถึง 10
- ผลักค่าของตัวแปร x เข้าไปในเวกเตอร์
- พิมพ์ขนาดของเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ บนคอนโซล
- พิมพ์ความจุของเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ บนคอนโซล
- พิมพ์จำนวนรายการสูงสุดที่เวกเตอร์สามารถเก็บไว้ข้างข้อความอื่นๆ บนคอนโซล
- ปรับขนาดเวกเตอร์ให้มีเพียง 5 องค์ประกอบเท่านั้น
- พิมพ์ขนาดใหม่ของเวกเตอร์ควบคู่ไปกับข้อความอื่น
- ตรวจสอบว่าเวกเตอร์ไม่ว่างเปล่า
- พิมพ์ข้อความบนคอนโซลหากเวกเตอร์ไม่ว่างเปล่า
- ใช้คำสั่ง else เพื่อระบุว่าต้องทำอย่างไรหากเวกเตอร์ว่างเปล่า
- ข้อความที่จะพิมพ์บนคอนโซลหากเวกเตอร์ว่างเปล่า
- โปรแกรมจะต้องคืนค่าเมื่อเสร็จสิ้นสำเร็จ
- จุดสิ้นสุดของเนื้อหาฟังก์ชัน main()





