📜  C++ STL-list(1)

📅  最后修改于: 2023-12-03 14:59:45.704000             🧑  作者: Mango

C++ STL List

简介

C++ STL(Standard Template Library)中的list是一个常用的容器,它以双向链表的形式存储元素。list提供了一系列成员函数和算法,使得元素的插入、删除和移动变得高效。

特点
  • 双向迭代器:list支持双向迭代器,可以在容器中顺序或逆序地遍历元素。
  • 动态增长:list的大小可以根据需要动态增长,不需要预先指定容器大小。
  • 高效的插入和删除:在list中插入或删除元素的成本与容器大小无关,时间复杂度为常数。
  • 无需拷贝元素:list存储元素的方式决定了无需进行元素的拷贝构造和析构,只需修改指针。
使用方法
包含头文件

使用list之前,需要包含头文件<list>

#include <list>
声明和初始化
std::list<数据类型> listName; // 声明一个空的list

std::list<int> myList; // 声明一个存储整数的list
添加元素
  • 在末尾添加元素:push_back(value)
myList.push_back(10); // 在末尾添加元素10
myList.push_back(20); // 在末尾添加元素20
  • 在开头添加元素:push_front(value)
myList.push_front(5); // 在开头添加元素5
访问元素

list不支持随机访问,可以使用迭代器遍历容器。

std::list<int>::iterator it; // 定义一个迭代器

for (it = myList.begin(); it != myList.end(); ++it) {
    std::cout << *it << " "; // 输出元素值
}
插入和删除元素
  • 在指定位置插入元素:insert(position, value)
std::list<int>::iterator it = myList.begin();
++it; // 指向第二个元素的迭代器

myList.insert(it, 15); // 在第二个位置插入元素15
  • 删除指定元素:remove(value)
myList.remove(10); // 删除所有值为10的元素
其他操作
  • 获取元素个数:size()
std::cout << "List size: " << myList.size() << std::endl; // 输出list的大小
  • 清空list:clear()
myList.clear(); // 清空list中的所有元素
示例
#include <iostream>
#include <list>

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

    myList.push_back(10);
    myList.push_back(20);
    myList.push_front(5);

    std::cout << "List elements: ";
    std::list<int>::iterator it;
    for (it = myList.begin(); it != myList.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    myList.insert(++myList.begin(), 15);

    myList.remove(10);

    std::cout << "List size: " << myList.size() << std::endl;

    myList.clear();

    return 0;
}

以上示例演示了list的基本用法,包括添加元素、访问元素、插入和删除元素、获取大小以及清空容器。

小结

list是C++ STL中一个有用的双向链表容器,适用于需要频繁插入和删除元素的场景。通过熟悉list的使用方法,程序员可以更高效地处理大量数据的操作。