ในบทความนี้เราจะพูดถึงการทำงาน ไวยากรณ์และตัวอย่างของฟังก์ชัน list::erase() ใน C++
รายการใน STL คืออะไร
รายการเป็นโครงสร้างข้อมูลที่อนุญาตให้แทรกและลบเวลาคงที่ได้ทุกที่ตามลำดับ รายการถูกนำไปใช้เป็นรายการที่เชื่อมโยงเป็นสองเท่า รายการอนุญาตการจัดสรรหน่วยความจำที่ไม่ต่อเนื่องกัน List ทำการดึงการแทรกและย้ายองค์ประกอบได้ดีกว่าในตำแหน่งใดๆ ในคอนเทนเนอร์ มากกว่าอาร์เรย์ เวกเตอร์ และ deque ใน List การเข้าถึงองค์ประกอบโดยตรงนั้นช้าและ list นั้นคล้ายกับ forward_list แต่ออบเจกต์ของรายการส่งต่อเป็นรายการที่เชื่อมโยงเพียงรายการเดียว และสามารถทำซ้ำได้เพียงส่งต่อเท่านั้น
รายการ ::ลบ () คืออะไร
list::erase() เป็นฟังก์ชัน inbuilt ใน C++ STL ซึ่งประกาศไว้ในไฟล์ส่วนหัว ลบ () ใช้เพื่อลบองค์ประกอบออกจากคอนเทนเนอร์รายการ เราสามารถลบองค์ประกอบเดียวหรือช่วงขององค์ประกอบออกจากคอนเทนเนอร์รายการ ช่วยลดขนาดของคอนเทนเนอร์รายการตามจำนวนองค์ประกอบที่จะลบ/ลบ
ไวยากรณ์
list_container.erase(positon); list_container.erase(start_position, end_position);
ฟังก์ชันนี้สามารถรับพารามิเตอร์ได้หนึ่งหรือสองพารามิเตอร์ -
พารามิเตอร์
-
ตำแหน่ง - นี่คือตำแหน่งเดียวที่เราต้องการที่จะลบองค์ประกอบ
-
start_position, end_position - กำหนดช่วงที่เราต้องการลบองค์ประกอบ
ผลตอบแทนที่ได้รับ
ฟังก์ชันนี้ส่งคืนตัววนซ้ำซึ่งชี้ไปถัดจากองค์ประกอบสุดท้ายที่ถูกลบออก
ตัวอย่าง
ในโค้ดด้านล่าง เราต้องลบองค์ประกอบโดยใช้ฟังก์ชัน Erase() ที่มีอยู่ใน STL และเราจะดึงข้อมูลองค์ประกอบแรกโดยใช้ตัววนซ้ำซึ่งจะชี้ไปที่องค์ประกอบแรกโดยใช้ฟังก์ชัน start() และหลังจากนั้นเราจะลบตัววนซ้ำ ที่มีองค์ประกอบแรกของรายการ
#include <bits/stdc++.h> using namespace std; int main(){ //Create a list list<int> myList; myList.push_back(2); myList.push_back(4); myList.push_back(6); myList.push_back(8); myList.push_back(10); cout<<"List before deleting elements: "; for (auto i = myList.begin(); i!= myList.end(); i++){ cout << *i<< " "; } //iterator that will point to the first element list<int>::iterator i = myList.begin(); myList.erase(i); //list after deleting the element cout << "\nList after deleting elements: "; for (auto i = myList.begin(); i!= myList.end(); i++){ cout << *i << " "; } return 0; }
ผลลัพธ์
หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
List before deleting elements: 2 4 6 8 10 List after deleting elements: 4 6 8 10
ตัวอย่าง
ในโค้ดด้านล่าง เราต้องลบองค์ประกอบโดยใช้ฟังก์ชัน Erase() ที่มีอยู่ใน STLand เพื่อที่เราจะดึงองค์ประกอบแรกโดยใช้ตัววนซ้ำ (iterator 1) ที่จะชี้ไปที่องค์ประกอบแรกโดยใช้ฟังก์ชัน start() และเราจะเอาอีก iterator(ตัววนซ้ำ 2) เพื่อชี้ไปที่องค์ประกอบที่สอง และหลังจากนั้น เราจะลบตัววนซ้ำจากช่วงระหว่างตัววนซ้ำ 1 และตัววนซ้ำ 2 และแสดงผลลัพธ์
#include <bits/stdc++.h> using namespace std; int main(){ //Create a list list<int> myList; myList.push_back(2); myList.push_back(4); myList.push_back(6); myList.push_back(8); myList.push_back(10); cout<<"List before deleting elements: "; for (auto i = myList.begin(); i!= myList.end(); i++){ cout << *i << " "; } //iterator that will point to the first element list<int>::iterator i_1, i_2; i_1 = myList.begin(); i_2 = myList.begin(); //advance() function will increment the position of iterator 2 by 3 advance(i_2, 4); //now it will delete the elements from the range 0 - 4 myList.erase(i_1, i_2); //list after deleting the element cout<< "\nList after deleting elements: "; for (auto i = myList.begin(); i!= myList.end(); i++){ cout << *i << " "; } return 0; }
ผลลัพธ์
หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
List before deleting elements: 2 4 6 8 10 List after deleting elements: 10