机试必备list用法

在 C++ 中,std::list 是标准模板库(STL)提供的一种容器,它实现了双向链表的数据结构。

基本定义

要使用 std::list,需要包含 <list> 头文件。std::list 是一个模板类,其定义如下:

#include <list>
// ...
std::list<数据类型> 变量名;

这里的“数据类型”可以是任何有效的 C++ 数据类型,例如 intdoublestd::string 等,“变量名”是你为这个 list 对象起的名字。

示例代码:定义不同类型的 std::list

#include <iostream>
#include <list>
#include <string>

int main() {
    // 定义一个存储 int 类型元素的 list
    std::list<int> intList;

    // 定义一个存储 double 类型元素的 list,并初始化一些元素
    std::list<double> doubleList = {1.1, 2.2, 3.3};

    // 定义一个存储 std::string 类型元素的 list
    std::list<std::string> stringList;

    return 0;
}

常见用法

1. 添加元素

  • push_back():在链表的尾部添加一个元素。
  • push_front():在链表的头部添加一个元素。
  • insert():在指定位置插入一个或多个元素。
#include <iostream>
#include <list>

int main() {
    std::list<int> myList;

    // 在尾部添加元素
    myList.push_back(1);
    myList.push_back(2);

    // 在头部添加元素
    myList.push_front(0);

    // 在指定位置插入元素
    auto it = myList.begin();
    ++it; // 移动到第二个位置
    myList.insert(it, 10);

    // 输出 list 中的元素
    for (int num : myList) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

2. 删除元素

  • pop_back():删除链表的最后一个元素。
  • pop_front():删除链表的第一个元素。
  • erase():删除指定位置或指定范围的元素。
  • remove():删除所有值等于指定值的元素。
#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3, 2, 4};

    // 删除最后一个元素
    myList.pop_back();

    // 删除第一个元素
    myList.pop_front();

    // 删除指定位置的元素
    auto it = myList.begin();
    ++it; // 移动到第二个位置
    myList.erase(it);

    // 删除所有值为 2 的元素
    myList.remove(2);

    // 输出 list 中的元素
    for (int num : myList) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

3. 遍历元素

可以使用迭代器或范围 for 循环来遍历 std::list 中的元素。

#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3, 4, 5};

    // 使用迭代器遍历
    for (auto it = myList.begin(); it != myList.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // 使用范围 for 循环遍历
    for (int num : myList) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

4. 获取元素数量

使用 size() 方法可以获取 std::list 中元素的数量。

#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3, 4, 5};
    std::cout << "Size of the list: " << myList.size() << std::endl;
    return 0;
}

5. 检查是否为空

使用 empty() 方法可以检查 std::list 是否为空。

#include <iostream>
#include <list>

int main() {
    std::list<int> myList;
    if (myList.empty()) {
        std::cout << "The list is empty." << std::endl;
    }
    return 0;
}

std::list 的特点

  • 双向链表结构std::list 是基于双向链表实现的,这意味着它支持在常数时间内进行插入和删除操作(在已知位置的情况下),但随机访问的效率较低(需要从头或尾开始遍历链表)。
  • 动态大小std::list 的大小可以动态变化,你可以根据需要添加或删除元素。

std::list 适用于需要频繁进行插入和删除操作,而对随机访问需求较少的场景。随机访问可用vector.

考研机试常用的数据结构 文章被收录于专栏

考研机试常用的数据结构

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务