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

การแก้ไขเวกเตอร์: insert erase clear

แทรก ลบ และล้างสมาชิก โดยคำนึงถึงกฎการทำให้ตัววนซ้ำใช้ไม่ได้

การแก้ไขเวกเตอร์: insert erase clear เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

การแทรกที่ส่วนท้าย

การแทรกที่เร็วที่สุดคือ push_back หรือ emplace_back ทั้งสองแบบเพิ่มข้อมูลที่ส่วนท้ายด้วยเวลา O(1) โดยเฉลี่ยเมื่อพิจารณาการดำเนินการหลายครั้ง

การแทรกที่ตำแหน่งใดก็ได้

insert(pos, value) เลื่อนทุกสิ่งหลัง pos ไปทางขวา ใช้เวลา O(n)

std::vector<int> v = {1, 2, 4, 5};
v.insert(v.begin() + 2, 3);   // {1, 2, 3, 4, 5}

การแทรกช่วงข้อมูล

แทรกสมาชิกทั้งหมดจากคอนเทนเนอร์อื่นได้ในครั้งเดียว

std::vector<int> v = {1, 5};
std::vector<int> mid = {2, 3, 4};
v.insert(v.begin() + 1, mid.begin(), mid.end());
// {1, 2, 3, 4, 5}

การแทรกสำเนาหลายชุด

แทรกสำเนาของค่าเดียวกันจำนวน n ชุด

std::vector<int> v = {1, 4};
v.insert(v.begin() + 1, 2, 99);   // {1, 99, 99, 4}

การลบสมาชิกหนึ่งรายการ

erase(pos) ลบสมาชิกที่ตัววนซ้ำชี้อยู่ แล้วเลื่อนทุกสิ่งหลังจากนั้นไปทางซ้าย และคืนค่าตัววนซ้ำไปยังสมาชิกถัดไป

std::vector<int> v = {1, 2, 3, 4};
v.erase(v.begin() + 1);   // {1, 3, 4}

การลบช่วงข้อมูล

ลบสมาชิกทั้งหมดในช่วงแบบปิดด้านซ้ายและเปิดด้านขวา [first, last)

v.erase(v.begin() + 1, v.begin() + 3);

รูปแบบ erase-remove

หากต้องการลบสมาชิกทั้งหมดที่ตรงกับเพรดิเคตโดยไม่ทิ้งช่องว่าง ให้ใช้ std::remove_if ร่วมกับ erase

#include <algorithm>
v.erase(
    std::remove_if(v.begin(), v.end(), [](int x) { return x < 0; }),
    v.end()
);

C++20 std::erase และ std::erase_if

C++20 เพิ่มฟังก์ชันอิสระที่ครอบรูปแบบ erase-remove ไว้ให้

std::erase(v, 0);                    // remove all 0s
std::erase_if(v, [](int x) { return x < 0; });

clear: ลบสมาชิกทั้งหมด

clear() ลบสมาชิกทั้งหมด แต่ยังคง capacity ไว้ เหมาะสำหรับกรณีที่วางแผนจะเติมข้อมูลลงในเวกเตอร์อีกครั้ง

pop_back: ลบสมาชิกตัวสุดท้าย

ลบสมาชิกตัวสุดท้ายได้ในเวลา O(1) และไม่มีค่าที่คืนกลับมา หากต้องการใช้ค่านั้น ให้เก็บค่าไว้ก่อน

int last = v.back();
v.pop_back();

กฎการทำให้ตัววนซ้ำใช้ไม่ได้

insert และ erase ทำให้ตัววนซ้ำทุกตัวตั้งแต่ตำแหน่งที่แก้ไขเป็นต้นไปใช้ไม่ได้ erase คืนค่าตัววนซ้ำถัดไปที่ยังใช้ได้ คุณจึงวนซ้ำต่อได้

ตรวจสอบความเข้าใจ

std::remove_if เพียงอย่างเดียวทำอะไรกับเวกเตอร์?

สรุป

insert และ erase ทำงานที่ตำแหน่งใดก็ได้ในเวลา O(n) ใช้ push_back/pop_back เพื่อเพิ่มหรือลบที่ส่วนท้ายในเวลา O(1) ใช้รูปแบบ erase-remove หรือ std::erase_if ของ C++20 เพื่อลบสมาชิกที่ตรงเงื่อนไข

คำถามที่พบบ่อย

บทเรียน “การแก้ไขเวกเตอร์: insert erase clear” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแก้ไขเวกเตอร์: insert erase clear” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแก้ไขเวกเตอร์: insert erase clear”

แทรก ลบ และล้างสมาชิก โดยคำนึงถึงกฎการทำให้ตัววนซ้ำใช้ไม่ได้ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การแก้ไขเวกเตอร์: insert erase clear” ใช้เวลานานแค่ไหน

บทเรียน 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