ในบทความนี้เราจะพูดถึงการทำงาน ไวยากรณ์และตัวอย่างของฟังก์ชัน 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