您的位置:

使用C++的listerase函数来擦除元素

一、list介绍

C++中的STL(Standard Template Library)是C++标准的一部分,其中包括了许多模板类和各种算法,比如vector,list,map等。其中list就是STL中的双向链表模板类。与vector不同,list可以在任何地方删除或插入元素,并且由于采用双向链表而不是动态数组,它不需要预留空间或者在删除/插入元素时重新分配内存。

list的基本语法如下:

#include 
using namespace std;

list
    l;

   
  

其中的int可以替换成其他数据类型。list虽然没有数组的[]符号,但它也可以像数组一样操作元素,比如遍历、访问、插入、删除。

二、list的访问方式

list的访问方式与数组类似,都可以通过迭代器进行遍历。使用迭代器的优点是可以不必关心list内部元素是如何组织的,可以直接访问元素而不需要知道其他元素的位置。

#include 
using namespace std;

list
    l;
l.push_back(1);
l.push_back(2);
l.push_back(3);

list
    ::iterator it; // 声明迭代器
for (it = l.begin(); it != l.end(); it++) {
    cout << *it << " "; // 输出元素的值
}

    
   
  

其中,begin()返回指向第一个元素的迭代器,end()返回指向最后一个元素后面的迭代器,而迭代器it从begin()开始不断遍历到end()。

三、使用listerase函数删除元素

删除元素是list最基本的操作之一,使用listerase函数可以快速擦除list中特定位置处的元素。listerase函数的基本语法如下:

#include 
using namespace std;

list
    l;
l.push_back(1);
l.push_back(2);
l.push_back(3);

list
    ::iterator it = l.begin(); // 获得指向开始位置的迭代器
it++; // 移动迭代器
l.erase(it); // 通过迭代器删除元素

    
   
  

在上面的代码中,我们先定义了一个list,然后往其中分别插入了三个元素1,2,3。接着,我们获得了指向第一个元素的迭代器it,并移动了该迭代器到第二个元素的位置。最后,我们使用listerase函数通过迭代器删除了第二个元素2。

需要注意的是,listerase函数并不返回被删除元素的值,因为如果想访问被删除元素的值,可以使用迭代器it访问。

四、小结

在C++ STL中,list比vector更适合用于频繁插入和删除元素的操作。使用listerase函数可以快速擦除list中特定位置处的元素,同时遍历list可以使用迭代器,它比数组更加灵活。

完整代码示例:

#include 
#include 
   
using namespace std;

int main() {
    list
     l;
    l.push_back(1);
    l.push_back(2);
    l.push_back(3);

    list
     ::iterator it = l.begin();
    it++;
    l.erase(it);

    for (it = l.begin(); it != l.end(); it++) {
        cout << *it << " ";
    }

    return 0;
}