一、list介绍
C++中的STL(Standard Template Library)是C++标准的一部分,其中包括了许多模板类和各种算法,比如vector,list,map等。其中list就是STL中的双向链表模板类。与vector不同,list可以在任何地方删除或插入元素,并且由于采用双向链表而不是动态数组,它不需要预留空间或者在删除/插入元素时重新分配内存。
list的基本语法如下:
#includeusing namespace std; list
l;
其中的int可以替换成其他数据类型。list虽然没有数组的[]符号,但它也可以像数组一样操作元素,比如遍历、访问、插入、删除。
二、list的访问方式
list的访问方式与数组类似,都可以通过迭代器进行遍历。使用迭代器的优点是可以不必关心list内部元素是如何组织的,可以直接访问元素而不需要知道其他元素的位置。
#includeusing 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函数的基本语法如下:
#includeusing 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; }