一、基礎(chǔ)概念
List是C++標(biāo)準(zhǔn)庫(kù)中的一個(gè)容器,可以存儲(chǔ)不同類型的元素,可以通過(guò)下標(biāo)或迭代器進(jìn)行訪問(wèn)。而erase()是List容器的一個(gè)方法,用于刪除指定位置或指定范圍內(nèi)的元素。
erase()方法有幾種重載形式,如:
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
第一種形式是刪除指定位置的元素,第二種形式是刪除指定范圍內(nèi)的元素。這兩種形式都返回一個(gè)指向被刪除元素之后位置的迭代器。
二、刪除單個(gè)元素
使用erase()方法刪除List中的單個(gè)元素,只需要指定要?jiǎng)h除的元素的位置即可。例如:
std::list myList = { 1, 2, 3, 4, 5 };
auto it = myList.begin();
std::advance(it, 2);
myList.erase(it);
以上代碼將刪除List容器中第三個(gè)元素,即值為3的元素。注意,使用erase()方法之后,List容器的大小將減小1。
三、刪除指定范圍內(nèi)的元素
erase()方法的第二種形式用于刪除指定范圍內(nèi)的元素,例如:
std::list myList = { 1, 2, 3, 4, 5 };
auto first = myList.begin();
auto last = myList.end();
std::advance(first, 2);
std::advance(last, -2);
myList.erase(first, last);
以上代碼將刪除List容器中第3個(gè)元素至倒數(shù)第3個(gè)元素之間的所有元素。要注意的是,erase()方法刪除范圍時(shí),包含第一個(gè)迭代器所指向的元素,但不包含最后一個(gè)迭代器所指向的元素。
四、刪除所有匹配元素
如果要?jiǎng)h除List容器中所有匹配的元素,可以使用STL算法remove()和erase()配合使用,例如:
std::list myList = { 1, 2, 3, 4, 5, 2 };
myList.erase(std::remove(myList.begin(), myList.end(), 2), myList.end());
以上代碼將刪除List容器中的所有值為2的元素。注意,remove()算法并不會(huì)真正地刪除元素,而是將不需要?jiǎng)h除的元素前移,然后返回最后一個(gè)不需要?jiǎng)h除元素的指針。通過(guò)配合erase()方法,可以將不需要?jiǎng)h除的元素保留,將需要?jiǎng)h除的元素刪除。
五、應(yīng)用場(chǎng)景
erase()方法可以在很多實(shí)際的開(kāi)發(fā)場(chǎng)景中使用,例如:
六、總結(jié)
List容器是C++標(biāo)準(zhǔn)庫(kù)中的一個(gè)常用容器,提供了豐富的方法來(lái)操作容器內(nèi)的元素。erase()方法是其中一個(gè)非常實(shí)用的方法,可以用來(lái)刪除單個(gè)元素、刪除指定范圍內(nèi)的元素或刪除所有匹配元素。在實(shí)際的開(kāi)發(fā)場(chǎng)景中,使用該方法可以提高程序的效率和可讀性。