การแก้ไขเวกเตอร์: 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน std::vector: push_back size capacity
- การวนซ้ำเวกเตอร์: ดัชนี range-for ตัววนซ้ำ
- การแก้ไขเวกเตอร์: insert erase clear
- เวกเตอร์เทียบกับ std::array และอาร์เรย์ C