Vector มีความสามารถปรับขนาดอัตโนมัติเหมือน dynamic arrays เมื่อมีการแทรกหรือลบสมาชิก Container จะจัดการหน่วยความจำโดยอัตโนมัติ
ความแตกต่างหลักระหว่าง resize() และ reserve() คือ resize() ใช้เปลี่ยนขนาด (size) ของ vector ส่วน reserve() ไม่เปลี่ยนขนาด reserve() ใช้เพื่อจองพื้นที่หน่วยความจำให้รองรับจำนวนสมาชิกที่ระบุไว้ล่วงหน้า โดยไม่ต้อง reallocate memory ส่วน resize() หากระบุขนาดน้อยกว่าปัจจุบัน จะลดขนาดหน่วยความจำและลบพื้นที่เกินออกไป
vector::resize()
ใช้เปลี่ยนขนาด (size) ของ vector
ขั้นตอนในโค้ดต้นฉบับ
เริ่มต้น
ประกาศตัวแปร v เป็น vector
ประกาศตัวแปร it เป็น iterator ของ vector
ประกาศตัวแปร c และ i เป็น integer
while (TRUE) ทำ
แสดง "1. ขนาดของ Vector"
แสดง "2. แทรกสมาชิกเข้า Vector"
แสดง "3. ปรับขนาด Vector (Resize)"
แสดง "4. แสดงด้วย Iterator"
แสดง "5. ออก"
แสดง "เลือกเมนู: "
รับค่าตัวแปร c
Switch(c)
Case 1: แสดง "ขนาดของ Vector: " เรียก size()
Case 2: แสดง "ใส่ค่าที่ต้องการแทรก: " รับค่า i เรียก push_back()
Case 3: แสดง "ปรับขนาด vector:" เรียก resize(4)
Case 4: แสดง "แสดง Vector ด้วย Iterator: " วนลูป iterator แสดงค่า
Case 5: เรียก exit()
Default: แสดง "ตัวเลือกผิด"
สิ้นสุด
โค้ดตัวอย่าง
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
vector<int>::iterator it;
int c, i;
while (1) {
cout << "1. ขนาดของ Vector" << endl;
cout << "2. แทรกสมาชิกเข้า Vector" << endl;
cout << "3. ปรับขนาด Vector" << endl;
cout << "4. แสดงด้วย Iterator" << endl;
cout << "5. ออก" << endl;
cout << "เลือกเมนู: ";
cin >> c;
switch(c) {
case 1:
cout << "ขนาดของ Vector: ";
cout << v.size() << endl;
break;
case 2:
cout << "ใส่ค่าที่ต้องการแทรก: ";
cin >> i;
v.push_back(i);
break;
case 3:
cout << "ปรับขนาด vector:" << endl;
v.resize(4);
break;
case 4:
cout << "แสดง Vector ด้วย Iterator: ";
for (it = v.begin(); it != v.end(); it++)
cout << *it << " ";
cout << endl;
break;
case 5:
exit(1);
break;
default:
cout << "ตัวเลือกผิด" << endl;
}
}
return 0;
}
ผลลัพธ์ตัวอย่าง
1. ขนาดของ Vector 2. แทรกสมาชิกเข้า Vector 3. ปรับขนาด Vector 4. แสดงด้วย Iterator 5. ออก เลือกเมนู: 1 ขนาดของ Vector: 0 ... (ตัวอย่างการทำงานแบบโต้ตอบ)
vector::reserve()
Vector reserve() ใช้บ่งชี้ว่า vector ควรจองพื้นที่หน่วยความจำให้รองรับจำนวนสมาชิกที่ระบุไว้ล่วงหน้า โดยไม่ต้อง reallocate memory
อัลกอริทึม
เริ่มต้น
ประกาศตัวแปร v เป็น vector
ประกาศตัวแปร it เป็น iterator ของ vector
ประกาศตัวแปร c และ i เป็น integer
while (1) ทำ
แสดง "1. ขนาดของ Vector"
แสดง "2. แทรกสมาชิกเข้า Vector"
แสดง "3. จองพื้นที่ Vector (Reserve)"
แสดง "4. แสดงด้วย Iterator"
แสดง "5. ออก"
แสดง "เลือกเมนู: "
รับค่าตัวแปร c
Switch(c)
Case 1: แสดง "ขนาดของ Vector: " เรียก size()
Case 2: แสดง "ใส่ค่าที่ต้องการแทรก: " รับค่า i เรียก push_back()
Case 3: แสดง "จองพื้นที่ vector:" เรียก reserve(100)
Case 4: แสดง "แสดง Vector ด้วย Iterator: " วนลูป iterator แสดงค่า
Case 5: เรียก exit()
Default: แสดง "ตัวเลือกผิด"
สิ้นสุด
โค้ดตัวอย่าง
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
vector<int>::iterator it;
int c, i;
while (1) {
cout << "1. ขนาดของ Vector" << endl;
cout << "2. แทรกสมาชิกเข้า Vector" << endl;
cout << "3. จองพื้นที่ Vector (Reserve)" << endl;
cout << "4. แสดงด้วย Iterator" << endl;
cout << "5. ออก" << endl;
cout << "เลือกเมนู: ";
cin >> c;
switch(c) {
case 1:
cout << "ขนาดของ Vector: ";
cout << v.size() << endl;
break;
case 2:
cout << "ใส่ค่าที่ต้องการแทรก: ";
cin >> i;
v.push_back(i);
break;
case 3:
cout << "จองพื้นที่ vector:" << endl;
v.reserve(100);
break;
case 4:
cout << "แสดง Vector ด้วย Iterator: ";
for (it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
cout << endl;
break;
case 5:
exit(1);
break;
default:
cout << "ตัวเลือกผิด" << endl;
}
}
return 0;
}
ผลลัพธ์ตัวอย่าง
1. ขนาดของ Vector 2. แทรกสมาชิกเข้า Vector 3. จองพื้นที่ Vector (Reserve) 4. แสดงด้วย Iterator 5. ออก เลือกเมนู: 1 ขนาดของ Vector: 0 ... (ตัวอย่างการทำงานแบบโต้ตอบ - reserve ไม่เปลี่ยน size แต่เพิ่ม capacity)