เวกเตอร์ใน C++ ไลบรารีเทมเพลตมาตรฐาน (STL) พร้อมตัวอย่าง
อะไรคือ a C++ เวกเตอร์?
A C++ เวกเตอร์ เป็นอาร์เรย์แบบไดนามิกที่สามารถปรับขนาดตัวเองได้โดยอัตโนมัติ การปรับขนาดเกิดขึ้นหลังจากเพิ่มหรือลบองค์ประกอบออกจากเวกเตอร์ ที่เก็บข้อมูลได้รับการจัดการโดยอัตโนมัติโดยคอนเทนเนอร์ องค์ประกอบของเวกเตอร์จะถูกจัดเก็บไว้ในที่จัดเก็บที่อยู่ติดกัน สิ่งนี้ช่วยให้ C++ โปรแกรมเมอร์สามารถเข้าถึงและเคลื่อนผ่านองค์ประกอบเวกเตอร์โดยใช้ตัววนซ้ำ
การแทรกข้อมูลใหม่ลงในเวกเตอร์เสร็จสิ้นเมื่อสิ้นสุดแล้ว ซึ่งต้องใช้เวลาต่างกันออกไป การลบองค์ประกอบออกจากเวกเตอร์ต้องใช้เวลาคงที่ เหตุผลก็คือไม่จำเป็นต้องปรับขนาดเวกเตอร์ การแทรกหรือการลบองค์ประกอบที่จุดเริ่มต้นของเวกเตอร์ต้องใช้เวลาเชิงเส้น
เมื่อใดจึงควรใช้เวกเตอร์?
A C++ เวกเตอร์ควรใช้ภายใต้สถานการณ์ต่อไปนี้:
- เมื่อต้องรับมือกับองค์ประกอบข้อมูลที่เปลี่ยนแปลงอย่างต่อเนื่อง
- หากไม่ทราบขนาดของข้อมูลก่อนเริ่มต้น เวกเตอร์จะไม่ต้องการให้คุณกำหนดขนาดสูงสุดของคอนเทนเนอร์
วิธีการเตรียมใช้งานเวกเตอร์ในรูปแบบ C++
ไวยากรณ์ของเวกเตอร์ใน C++ คือ:
vector <data-type> name (items)
- ดังที่แสดงไว้ข้างต้น เราจะเริ่มต้นด้วยคำสำคัญเวกเตอร์
- ประเภทข้อมูลคือประเภทข้อมูลขององค์ประกอบที่จะจัดเก็บไว้ในเวกเตอร์
- ชื่อคือชื่อของเวกเตอร์หรือองค์ประกอบข้อมูล
- รายการแสดงถึงจำนวนองค์ประกอบสำหรับข้อมูลของเวกเตอร์ พารามิเตอร์นี้เป็นทางเลือก
ตัววนซ้ำ
วัตถุประสงค์ของตัววนซ้ำคือการช่วยให้เราเข้าถึงองค์ประกอบที่เก็บไว้ในเวกเตอร์ มันเป็นวัตถุที่ทำงานเหมือนตัวชี้ นี่คือตัววนซ้ำทั่วไปที่สนับสนุนโดย C++ เวกเตอร์:
- เวกเตอร์:: เริ่มต้น(): มันให้ตัววนซ้ำที่ชี้ไปที่องค์ประกอบแรกของเวกเตอร์
- เวกเตอร์:: สิ้นสุด(): มันให้ตัววนซ้ำที่ชี้ไปยังองค์ประกอบที่ผ่านมาถึงจุดสิ้นสุดของเวกเตอร์
- เวกเตอร์::cbegin(): มันเหมือนกับ vector::begin() แต่ไม่มีความสามารถในการแก้ไของค์ประกอบ
- เวกเตอร์::cend(): มันเหมือนกับ vector::end() แต่ไม่สามารถแก้ไของค์ประกอบเวกเตอร์ได้
ตัวปรับเปลี่ยน
ตัวแก้ไขใช้สำหรับเปลี่ยนความหมายของประเภทข้อมูลที่ระบุ นี่คือตัวแก้ไขทั่วไปใน C++:
- เวกเตอร์::push_back(): ตัวแก้ไขนี้จะผลักองค์ประกอบจากด้านหลัง
- เวกเตอร์::แทรก(): สำหรับการแทรกรายการใหม่ลงในเวกเตอร์ในตำแหน่งที่ระบุ
- เวกเตอร์::pop_back(): ตัวแก้ไขนี้จะลบองค์ประกอบเวกเตอร์ออกจากด้านหลัง
- เวกเตอร์::ลบ(): ใช้สำหรับลบองค์ประกอบต่างๆ ออกจากตำแหน่งที่ระบุ
- เวกเตอร์::ชัดเจน(): มันจะลบองค์ประกอบเวกเตอร์ทั้งหมด
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:
นี่คือภาพหน้าจอของรหัส:
คำอธิบายรหัส:
- รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเรา มันจะช่วยให้เราอ่านและเขียนไปยังคอนโซลได้
- รวมไฟล์ส่วนหัวเวกเตอร์ไว้ในโค้ดของเรา มันจะช่วยให้เราทำงานกับเวกเตอร์ได้ C++.
- รวมเนมสเปซมาตรฐานเพื่อใช้คลาสและฟังก์ชันโดยไม่ต้องเรียกมัน
- เรียกใช้ฟังก์ชัน main() ภายในที่ควรเพิ่มตรรกะของโปรแกรม
- { เป็นจุดเริ่มต้นของส่วนเนื้อหาของฟังก์ชัน main()
- ประกาศเวกเตอร์ชื่อ nums เพื่อจัดเก็บชุดของจำนวนเต็ม
- สร้าง for loop เพื่อช่วยเราวนซ้ำเวกเตอร์ ตัวแปรจะช่วยเราวนซ้ำองค์ประกอบเวกเตอร์ตั้งแต่ 1st เพื่อ 5th องค์ประกอบ
- ดันองค์ประกอบเข้าไปในเวกเตอร์ num จากด้านหลัง สำหรับการวนซ้ำแต่ละครั้ง ค่านี้จะเพิ่มค่าปัจจุบันของตัวแปร a ลงในเวกเตอร์ ซึ่งก็คือ 1 ถึง 5
- พิมพ์ข้อความบนคอนโซล
- ใช้ตัวแปรตัววนซ้ำ a เพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums ตั้งแต่ต้นจนจบองค์ประกอบที่ผ่านมา โปรดทราบว่าเรากำลังใช้ตัววนซ้ำ vector::begin() และ vector::end()
- พิมพ์ค่าที่ชี้ไปที่ตัวแปรตัววนซ้ำและบนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
- พิมพ์ข้อความบนคอนโซล \n คืออักขระขึ้นบรรทัดใหม่ โดยเลื่อนเคอร์เซอร์ไปที่บรรทัดใหม่เพื่อพิมพ์จากตรงนั้น
- ใช้ตัวแปรตัววนซ้ำเพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums ตั้งแต่ต้นจนจบองค์ประกอบที่ผ่านมา โปรดทราบว่าเรากำลังใช้ตัววนซ้ำ vector::cbegin() และ vector::cend()
- พิมพ์ค่าที่ชี้ไปที่ตัวแปรตัววนซ้ำ a บนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
- ฟังก์ชั่นหลักควรส่งคืนค่าหากโปรแกรมทำงานได้สำเร็จ
- ส่วนท้ายของฟังก์ชัน main()
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:
นี่คือภาพหน้าจอของรหัส:
คำอธิบายรหัส:
- รวมไฟล์ส่วนหัว 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 รายการพิเศษจะถูกเพิ่มที่ด้านหลังของเวกเตอร์
- ว่างเปล่า () –it ส่งคืนค่าจริงหากเวกเตอร์ว่างเปล่า มิฉะนั้นจะคืนค่าเท็จ
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:
นี่คือภาพหน้าจอของรหัส:
คำอธิบายรหัส:
- รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชัน
- รวมไฟล์ส่วนหัวเวกเตอร์ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
- รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
- เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
- สร้างเวกเตอร์ชื่อ vector1 เพื่อเก็บจำนวนเต็ม
- ใช้ for loop เพื่อสร้างตัวแปร x ที่มีค่าตั้งแต่ 1 ถึง 10
- ผลักค่าของตัวแปร x เข้าไปในเวกเตอร์
- พิมพ์ขนาดของเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ บนคอนโซล
- พิมพ์ความจุของเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ บนคอนโซล
- พิมพ์จำนวนรายการสูงสุดที่เวกเตอร์สามารถเก็บไว้ข้างข้อความอื่นๆ บนคอนโซล
- ปรับขนาดเวกเตอร์ให้มีเพียง 5 องค์ประกอบเท่านั้น
- พิมพ์ขนาดใหม่ของเวกเตอร์ควบคู่ไปกับข้อความอื่น
- ตรวจสอบว่าเวกเตอร์ไม่ว่างเปล่า
- พิมพ์ข้อความบนคอนโซลหากเวกเตอร์ไม่ว่างเปล่า
- ใช้คำสั่ง else เพื่อระบุว่าต้องทำอย่างไรหากเวกเตอร์ว่างเปล่า
- ข้อความที่จะพิมพ์บนคอนโซลหากเวกเตอร์ว่างเปล่า
- โปรแกรมจะต้องคืนค่าเมื่อเสร็จสิ้นสำเร็จ
- จุดสิ้นสุดของเนื้อหาฟังก์ชัน main()
สรุป
- A C++ vector เป็นอาร์เรย์แบบไดนามิกที่สามารถปรับขนาดตัวเองได้โดยอัตโนมัติเมื่อมีการเพิ่มหรือลบองค์ประกอบออกไป
- พื้นที่เก็บข้อมูลสำหรับเวกเตอร์ได้รับการจัดการโดยอัตโนมัติโดยคอนเทนเนอร์
- องค์ประกอบของเวกเตอร์จะถูกจัดเก็บไว้ในที่เก็บข้อมูลที่อยู่ติดกันเพื่อให้สามารถเข้าถึงได้ จากนั้นจึงสำรวจโดยใช้ตัววนซ้ำ
- การแทรกข้อมูลใหม่ลงในเวกเตอร์เสร็จสิ้นเมื่อสิ้นสุด
- การแทรกข้อมูลลงในเวกเตอร์ต้องใช้เวลาต่างกัน
- การลบองค์ประกอบออกจากเวกเตอร์ต้องใช้เวลาคงที่
- การแทรกหรือการลบองค์ประกอบที่จุดเริ่มต้นต้องใช้เวลาเป็นเส้นตรง
- เวกเตอร์ควรใช้เมื่อจัดการกับองค์ประกอบข้อมูลที่เปลี่ยนแปลงอย่างสม่ำเสมอ
- นอกจากนี้ คุณยังสามารถใช้เวกเตอร์ได้หากไม่ทราบขนาดของข้อมูลก่อนเริ่มต้น