0Pricing
C++ Academy · บทเรียน

พื้นฐาน 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 d

push_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 place

size เทียบกับ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน std::vector: push_back size capacity
  2. การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ
  3. การแก้ไขเวกเตอร์: insert erase clear
  4. เวกเตอร์เทียบกับ std::array และอาร์เรย์ C
← กลับไปที่ C++ Academy