เวกเตอร์ใน 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:

ตัวปรับเปลี่ยน

นี่คือภาพหน้าจอของรหัส:

ตัวปรับเปลี่ยน

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเรา มันจะช่วยให้เราอ่านและเขียนไปยังคอนโซลได้
  2. รวมไฟล์ส่วนหัวเวกเตอร์ไว้ในโค้ดของเรา มันจะช่วยให้เราทำงานกับเวกเตอร์ได้ C++.
  3. รวมเนมสเปซมาตรฐานเพื่อใช้คลาสและฟังก์ชันโดยไม่ต้องเรียกมัน
  4. เรียกใช้ฟังก์ชัน main() ภายในที่ควรเพิ่มตรรกะของโปรแกรม
  5. { เป็นจุดเริ่มต้นของส่วนเนื้อหาของฟังก์ชัน main()
  6. ประกาศเวกเตอร์ชื่อ nums เพื่อจัดเก็บชุดของจำนวนเต็ม
  7. สร้าง for loop เพื่อช่วยเราวนซ้ำเวกเตอร์ ตัวแปรจะช่วยเราวนซ้ำองค์ประกอบเวกเตอร์ตั้งแต่ 1st เพื่อ 5th องค์ประกอบ
  8. ดันองค์ประกอบเข้าไปในเวกเตอร์ num จากด้านหลัง สำหรับการวนซ้ำแต่ละครั้ง ค่านี้จะเพิ่มค่าปัจจุบันของตัวแปร a ลงในเวกเตอร์ ซึ่งก็คือ 1 ถึง 5
  9. พิมพ์ข้อความบนคอนโซล
  10. ใช้ตัวแปรตัววนซ้ำ a เพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums ตั้งแต่ต้นจนจบองค์ประกอบที่ผ่านมา โปรดทราบว่าเรากำลังใช้ตัววนซ้ำ vector::begin() และ vector::end()
  11. พิมพ์ค่าที่ชี้ไปที่ตัวแปรตัววนซ้ำและบนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
  12. พิมพ์ข้อความบนคอนโซล \n คืออักขระขึ้นบรรทัดใหม่ โดยเลื่อนเคอร์เซอร์ไปที่บรรทัดใหม่เพื่อพิมพ์จากตรงนั้น
  13. ใช้ตัวแปรตัววนซ้ำเพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums ตั้งแต่ต้นจนจบองค์ประกอบที่ผ่านมา โปรดทราบว่าเรากำลังใช้ตัววนซ้ำ vector::cbegin() และ vector::cend()
  14. พิมพ์ค่าที่ชี้ไปที่ตัวแปรตัววนซ้ำ a บนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
  15. ฟังก์ชั่นหลักควรส่งคืนค่าหากโปรแกรมทำงานได้สำเร็จ
  16. ส่วนท้ายของฟังก์ชัน 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:

ตัวปรับเปลี่ยน

นี่คือภาพหน้าจอของรหัส:

ตัวปรับเปลี่ยน

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมไฟล์ส่วนหัวเวกเตอร์ไว้ในโค้ดของเราเพื่อใช้งาน ฟังก์ชั่น.
  3. รวมเนมสเปซมาตรฐานเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  4. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมเข้าไปในเนื้อความ
  5. จุดเริ่มต้นของฟังก์ชัน main()
  6. ประกาศเวกเตอร์ชื่อ nums เพื่อเก็บค่าจำนวนเต็ม
  7. เก็บ 5 องค์ประกอบไว้ในตัวเลขเวกเตอร์ แต่ละตัวมีค่าเท่ากับ 1
  8. พิมพ์ข้อความบนคอนโซล
  9. ใช้ตัวแปรตัววนซ้ำ a เพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums
  10. พิมพ์ค่าของ vector nums บนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
  11. เพิ่มค่า 2 ต่อท้ายตัวเลขเวกเตอร์
  12. ประกาศตัวแปรจำนวนเต็ม n เพื่อจัดเก็บขนาดของตัวเลขเวกเตอร์
  13. พิมพ์ค่าสุดท้ายของตัวเลขเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ มันควรคืนค่า 2
  14. ลบองค์ประกอบสุดท้ายออกจากตัวเลขเวกเตอร์ 2 ตัวจะถูกลบออก
  15. พิมพ์ข้อความบนคอนโซล \n เลื่อนเคอร์เซอร์ไปที่บรรทัดใหม่เพื่อพิมพ์ข้อความที่นั่น
  16. ใช้ตัวแปรตัววนซ้ำ a เพื่อวนซ้ำองค์ประกอบของเวกเตอร์ nums
  17. พิมพ์ค่าของ vector nums บนคอนโซลสำหรับการวนซ้ำแต่ละครั้ง
  18. ใส่ค่า 7 ที่จุดเริ่มต้นของตัวเลขเวกเตอร์
  19. พิมพ์ค่าแรกของตัวเลขเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ มันควรกลับมา 7
  20. ลบองค์ประกอบทั้งหมดออกจากตัวเลขเวกเตอร์
  21. พิมพ์ขนาดของเวกเตอร์ num ควบคู่ไปกับข้อความอื่นหลังจากล้างเนื้อหาทั้งหมดแล้ว มันควรส่งคืน 0
  22. ส่วนท้ายของฟังก์ชัน 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:

ความจุ

นี่คือภาพหน้าจอของรหัส:

ความจุ

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชัน
  2. รวมไฟล์ส่วนหัวเวกเตอร์ไว้ในโค้ดของเราเพื่อใช้ฟังก์ชันต่างๆ
  3. รวมเนมสเปซมาตรฐานไว้ในโค้ดของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  4. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
  5. สร้างเวกเตอร์ชื่อ vector1 เพื่อเก็บจำนวนเต็ม
  6. ใช้ for loop เพื่อสร้างตัวแปร x ที่มีค่าตั้งแต่ 1 ถึง 10
  7. ผลักค่าของตัวแปร x เข้าไปในเวกเตอร์
  8. พิมพ์ขนาดของเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ บนคอนโซล
  9. พิมพ์ความจุของเวกเตอร์ควบคู่ไปกับข้อความอื่นๆ บนคอนโซล
  10. พิมพ์จำนวนรายการสูงสุดที่เวกเตอร์สามารถเก็บไว้ข้างข้อความอื่นๆ บนคอนโซล
  11. ปรับขนาดเวกเตอร์ให้มีเพียง 5 องค์ประกอบเท่านั้น
  12. พิมพ์ขนาดใหม่ของเวกเตอร์ควบคู่ไปกับข้อความอื่น
  13. ตรวจสอบว่าเวกเตอร์ไม่ว่างเปล่า
  14. พิมพ์ข้อความบนคอนโซลหากเวกเตอร์ไม่ว่างเปล่า
  15. ใช้คำสั่ง else เพื่อระบุว่าต้องทำอย่างไรหากเวกเตอร์ว่างเปล่า
  16. ข้อความที่จะพิมพ์บนคอนโซลหากเวกเตอร์ว่างเปล่า
  17. โปรแกรมจะต้องคืนค่าเมื่อเสร็จสิ้นสำเร็จ
  18. จุดสิ้นสุดของเนื้อหาฟังก์ชัน main()

สรุป

  • A C++ vector เป็นอาร์เรย์แบบไดนามิกที่สามารถปรับขนาดตัวเองได้โดยอัตโนมัติเมื่อมีการเพิ่มหรือลบองค์ประกอบออกไป
  • พื้นที่เก็บข้อมูลสำหรับเวกเตอร์ได้รับการจัดการโดยอัตโนมัติโดยคอนเทนเนอร์
  • องค์ประกอบของเวกเตอร์จะถูกจัดเก็บไว้ในที่เก็บข้อมูลที่อยู่ติดกันเพื่อให้สามารถเข้าถึงได้ จากนั้นจึงสำรวจโดยใช้ตัววนซ้ำ
  • การแทรกข้อมูลใหม่ลงในเวกเตอร์เสร็จสิ้นเมื่อสิ้นสุด
  • การแทรกข้อมูลลงในเวกเตอร์ต้องใช้เวลาต่างกัน
  • การลบองค์ประกอบออกจากเวกเตอร์ต้องใช้เวลาคงที่
  • การแทรกหรือการลบองค์ประกอบที่จุดเริ่มต้นต้องใช้เวลาเป็นเส้นตรง
  • เวกเตอร์ควรใช้เมื่อจัดการกับองค์ประกอบข้อมูลที่เปลี่ยนแปลงอย่างสม่ำเสมอ
  • นอกจากนี้ คุณยังสามารถใช้เวกเตอร์ได้หากไม่ทราบขนาดของข้อมูลก่อนเริ่มต้น