STL list操作详解:插入、删除、遍历等

4星 · 超过85%的资源 需积分: 12 7 下载量 57 浏览量 更新于2024-10-08 收藏 4KB TXT 举报
在C++标准库STL(Standard Template Library)中,`list`是一个双链表容器,提供了高效的操作方式来处理元素序列。以下是对STL中`list`容器的使用及其相关知识点的详细说明: 1. **构造与初始化** - A. `list<int> c0;` 创建一个空的`list`,默认不分配任何元素。 - B. `list<int> c1(3);` 初始化一个包含3个默认值(通常为0)的`list`。 - C. `list<int> c2(5, 2);` 初始化一个长度为5且所有元素都为2的`list`。 - D. `list<int> c4(c2);` 使用另一个`list`的副本来初始化新`list`,即`c4`是`c2`的深拷贝。 - E. `list<int> c5(c1.begin(), c1.end());` 通过迭代器区间创建`list`,将`c1`中的所有元素复制到`c5`。 2. **操作方法** - `assign()` 用于替换容器中的元素序列。如`c1.assign(++c2.begin(), c2.end())`将`c1`替换为`c2`的后两个元素(50, 60),而`c1.assign(7, 4)`将`c1`填充7个4。 3. **访问元素** - `back()` 返回最后一个元素的引用,如`int i = c1.back();` 获取`c1`的最后一个元素(30)。 - `begin()` 返回指向第一个元素的迭代器,`end()` 返回指向最后一个元素之后位置的迭代器(双链表中,`list::end()`不同于其他容器,它并不指向有效元素,而是指向超出范围的位置)。如`citer = c1.begin();` 和 `cciter = c1.begin();` 分别获取`c1`的第一个元素迭代器,其中`cciter`是常量迭代器。 4. **管理容器大小** - `clear()` 删除所有元素,`c1.clear()` 将使`c1`变为空,`c1.size()` 将返回0。 - `empty()` 检查容器是否为空,如`bool B = c1.empty();` 判断`c1`是否为空,当`c1`非空时,`B`为`false`。 5. **删除元素** - `erase()` 用于删除元素,如`c1.erase(c1.begin());` 删除`c1`的第一个元素,`c1.erase(++c1.begin(), c1.end());` 删除除了第一个元素之外的所有元素。 6. **插入元素** - `insert()` 可以在指定位置插入一个或多个元素。例如,`c1.insert(++c1.begin(), 100);` 在`c1`的第二个位置插入100,`c1.insert(c1.begin(), 2, 200);` 在开头插入两个200,`c1.insert(++c1.begin(), c2.begin(), --c2.end());` 将`c2`的元素(除了最后一个)插入`c1`的第二个位置。 7. **其他操作** - `front()` 返回第一个元素的引用,类似于`back()`,但返回的是第一个元素,如`int i = c1.front();` 获取`c1`的第一个元素(10)。 `list`在STL中适用于需要频繁插入、删除元素的情况,因为它的这些操作通常比其他容器(如`vector`)更高效。然而,对于顺序访问或随机访问,`list`可能不如`vector`或`deque`效率高,因为其元素不是连续存储的。理解并熟练运用`list`的各种操作,能够帮助开发者更加灵活地处理数据序列。