พื้นฐาน std::vector: push_back size capacity
สร้าง เพิ่มขนาด และตรวจสอบเวกเตอร์ พร้อมทำความเข้าใจความแตกต่างระหว่างความจุกับขนาด
พื้นฐาน std::vector: push_back size capacity เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้ std::vector?
std::vector เป็นคอนเทนเนอร์เริ่มต้นใน C++ ขนาดจะเพิ่มขึ้นโดยอัตโนมัติ จัดการหน่วยความจำให้คุณ และเข้าถึงข้อมูลแบบสุ่มได้ในเวลา O(1) ควรใช้มัน เว้นแต่จะมีเหตุผลเฉพาะที่ไม่ใช้
การรวมส่วนหัวและการประกาศ
รวม <vector> แล้วประกาศโดยระบุชนิดของสมาชิกเป็นพารามิเตอร์แม่แบบ
#include <vector>
std::vector<int> nums;
std::vector<std::string> names = {"Ada", "Bob"};รูปแบบการกำหนดค่าเริ่มต้น
มีหลายวิธีในการเริ่มต้นเวกเตอร์:
std::vector<int> a; // empty
std::vector<int> b(5); // 5 zeros
std::vector<int> c(5, 42); // 5 copies of 42
std::vector<int> d{1, 2, 3}; // {1,2,3}
std::vector<int> e(d); // copy of dpush_back: เพิ่มที่ส่วนท้าย
เพิ่มสมาชิกที่ส่วนท้ายด้วย push_back ใช้เวลา O(1) โดยเฉลี่ยเมื่อพิจารณาการดำเนินการหลายครั้ง
std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);emplace_back: สร้างตรงตำแหน่ง
emplace_back ส่งต่ออาร์กิวเมนต์ไปยังตัวสร้างของสมาชิกโดยตรง จึงไม่ต้องสร้างอ็อบเจ็กต์ชั่วคราว และจะเร็วขึ้นเล็กน้อยสำหรับชนิดที่มีการดำเนินการซับซ้อน
std::vector<std::pair<int,int>> v;
v.emplace_back(1, 2); // constructs a pair in placesize เทียบกับ capacity
แนวคิดสองอย่างที่แตกต่างกัน:
- size — จำนวนสมาชิกที่จัดเก็บอยู่ในปัจจุบัน
- capacity — จำนวนสมาชิกที่พื้นที่จัดเก็บรองรับได้โดยไม่ต้องจัดสรรใหม่
capacity จะเพิ่มขึ้นเป็นช่วง ๆ โดยปกติมักเพิ่มเป็นสองเท่า
การตรวจสอบ size และ capacity
ใช้ฟังก์ชันสมาชิกที่ตรงกับแต่ละค่า:
std::vector<int> v;
for (int i = 0; i < 10; ++i) {
v.push_back(i);
std::cout << "size=" << v.size() << " capacity=" << v.capacity() << "\n";
}reserve: จัดสรร capacity ล่วงหน้า
หากทราบว่าจะเพิ่มสมาชิกกี่รายการ ให้เรียก reserve ก่อน เพื่อหลีกเลี่ยงการจัดสรรหน่วยความจำใหม่ซ้ำ ๆ
std::vector<int> v;
v.reserve(1000000); // preallocate
for (int i = 0; i < 1000000; ++i) v.push_back(i);shrink_to_fit: คืนหน่วยความจำ
หลังจากลบสมาชิกไปเป็นจำนวนมาก ให้คืนพื้นที่ที่ไม่ได้ใช้ด้วย shrink_to_fit อย่างไรก็ตาม พฤติกรรมนี้ไม่ใช่ข้อบังคับ การใช้งานจริงอาจเก็บพื้นที่ส่วนเกินไว้
การเข้าถึงสมาชิก
มีสี่วิธี:
v[i]— ไม่ตรวจสอบขอบเขตv.at(i)— ตรวจสอบขอบเขตและโยนข้อผิดพลาดv.front()— สมาชิกตัวแรกv.back()— สมาชิกตัวสุดท้าย
การตรวจสอบว่างและการล้างข้อมูล
ตรวจสอบว่าไม่มีสมาชิกด้วย empty() ลบสมาชิกทั้งหมดด้วย clear() โดย capacity จะไม่เปลี่ยนแปลง
ตรวจสอบความเข้าใจ
เหตุใด push_back จึงใช้เวลา O(1) โดยเฉลี่ยเมื่อพิจารณาการดำเนินการหลายครั้ง?
สรุป
std::vector คืออาร์เรย์ที่ขยายขนาดได้และเข้าถึงข้อมูลแบบสุ่มได้ในเวลา O(1) size() คือจำนวนสมาชิก ส่วน capacity() คือขนาดพื้นที่จัดเก็บ reserve() ช่วยหลีกเลี่ยงการจัดสรรใหม่เมื่อทราบขนาดสุดท้าย
คำถามที่พบบ่อย
บทเรียน “พื้นฐาน std::vector: push_back size capacity” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐาน std::vector: push_back size capacity” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน std::vector: push_back size capacity”
สร้าง เพิ่มขนาด และตรวจสอบเวกเตอร์ พร้อมทำความเข้าใจความแตกต่างระหว่างความจุกับขนาด คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐาน std::vector: push_back size capacity” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน std::vector: push_back size capacity
- การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ
- การแก้ไขเวกเตอร์: insert erase clear
- เวกเตอร์เทียบกับ std::array และอาร์เรย์ C