Bootstrap

C++之list的使用

在C++中,std::list 是一个双向链表,它允许在列表的任何位置高效地插入和删除元素。以下是一些基本的使用方式:

包含头文件

要使用 std::list,首先需要包含头文件 <iostream>/list>

#include <iostream>
#include <list>

创建 list

// 创建一个空的 list
std::list<int> lst;

// 使用初始化列表创建 list
std::list<int> lst = {1, 2, 3, 4, 5};

添加元素

// 在 list 末尾添加一个元素
lst.push_back(6);

// 在 list 开头添加一个元素
lst.push_front(0);

// 在特定位置添加一个元素
auto it = std::next(lst.begin(), 2); // 定位到第三个元素的位置
lst.insert(it, 7);

删除元素

// 删除特定位置的元素
it = std::next(lst.begin(), 2); // 定位到第三个元素的位置
lst.erase(it);

// 删除特定值的所有元素
lst.remove(7);

// 删除从 pos 到 pos + n 的元素
auto end = std::next(it, 3); // 从第三个元素开始,删除三个元素
lst.erase(it, end);

访问元素

std::list 不支持随机访问,因此不能使用下标访问元素。但可以使用迭代器访问元素。

// 使用迭代器访问元素
for (auto it = lst.begin(); it != lst.end(); ++it) {
    std::cout << *it << " ";
}

修改元素

// 使用迭代器修改元素
for (auto it = lst.begin(); it != lst.end(); ++it) {
    if (*it == 2) {
        *it = 20; // 修改值为 20
        break;
    }
}

遍历 list

// 使用范围基 for 循环
for (int value : lst) {
    std::cout << value << " ";
}

// 使用传统 for 循环
for (auto it = lst.begin(); it != lst.end(); ++it) {
    std::cout << *it << " ";
}

获取 list 信息

// 获取 list 的大小
size_t size = lst.size();

// 检查 list 是否为空
bool empty = lst.empty();

清空 list

lst.clear();

交换两个 list 的内容

std::list<int> lst2 = {7, 8, 9};
lst.swap(lst2);

合并两个 list

std::list<int> lst2 = {7, 8, 9};
lst.merge(lst2); // 合并两个有序 list,假设它们已经排序

排序 list

lst.sort(); // 排序 list,使用 operator< 进行比较

反转 list

lst.reverse();

std::list 提供了许多其他功能和操作,这些只是最基本的一些。正确使用 std::list 可以极大地提高程序的灵活性和效率,尤其是在需要频繁插入和删除操作的场景中。

;