C++ list 容器学习笔记

本文整理自 https://zh.cppreference.com/w/cpp/container/list

std::list 是支持常数时间从容器任何位置插入和移除元素的容器。不支持快速随机访问。它通常实现为双向链表。与 std::forward_list 相比,此容器提供双向迭代但在空间上效率稍低。

要使用 list 类,要包含头文件 list:#include <list>

接下来我们来熟悉 Vector 类的常用成员函数: 1. 成员函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
list(); // 创建一个空的 list
list(size_type count, const T& value); // 构造拥有 count 个值 value 的容器
list(const list& other); // 复制构造函数

~list(); // 析构函数

list& operator=( const list& other ); // 以 other 的副本替换内容
list& operator= (list&& other); // 移动 other 内容替换原内容,other 处于未指定但有效状态
// 例
std::list<int> foo {3,0};
std::list<int> bar {5,0};

bar = foo;
foo = std::list<int>();

void assign( size_type count, const T& value ); // 给 list 赋 count 个 value
void assign( InputIterator first, InputIterator last); // 复制来源范围
// 例
foo.assign(5, 'a');

  1. 元素访问

    1
    2
    front(); // 返回非空容器首元素的引用
    back(); // 返回非空容器最后一个元素的引用
  2. 迭代器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    begin(); // 返回非空容器首元素的迭代器,若是空容器则等于 end()
    end(); // 返回容器末元素后一元素的迭代器
    rbegin(); // 返回逆向容器首元素的逆向迭代器,对应非逆容器的末元素
    rend(); // 返回你你想容器末元素后一元素的逆向迭代器,对应为非逆向容器首元素的前一元素
    // 常量版本
    cbegin();
    cend();
    crbegin();
    crend();
  3. 容量

    1
    2
    3
    bool empty() const; // 返回容器是否为空,即 begin() == end()
    size_type size() const; // 返回容器中的元素个数
    size_type max_size() const; // 容器可保有元素最大数量,std:distance(begin(), end())
  4. 修改器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void clear(); // 清空容器,size() = 0
    iterator insert( iterator pos, const T& value); // 在 pos 前插入 value
    void insert( iterator pos, size_type cnt, cosnt T& value); // 在 pos 前插入 value 的 cnt 个副本
    iterator insert( iterator pos, InputIt first, InputIt last); // 在 pos 前插入来自范围 [first, last) 的元素
    iterator emplace( const_itertor pos, ASrgs&&... args ); // 在 pos 前插入元素,直接构造元素,而非拷贝
    iterator erase( iterator pos); // 移除位于 pos 的元素
    iterator erase( iterator first, iterator last ); // 移除范围 [first, last) 的元素
    void push_back( const T& value ); // 在容器末插入元素 value
    void emplace_back( Args&&... args ); // 在容器末插入元素 value,通过构造函数
    void pop_back(); // 移除容器的最末元素
    void push_front( const T& value ); // 在容器起始插入元素 value
    void emplace_front( Args&&... args ); // 在容起始构造元素 value
    void pop_front(); // 移除容器的起始元素
    void resize( size_type count, T value = T() ); // 重设容器大小为 count,若当前大小小于 count,则减小容器为其首 count 个元素;若大于 count,则后附额外元素,以 value 副本初始化
    void swap( list& other ); // 将内容与 other 交换
  5. 操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void merge( list &other); // 归并两个升序排序链表为一个,other 变为空
    void merge( list &other, Compare comp); // 比较函数 comp
    void splice( const_iterator pos, list &other); // other 所有元素转移到 pos 所指元素之前
    void splice( const_iterator pos, list &other, const_iterator it); // 从 other 转移 it 所指向元素到 *this pos 所指向元素之前
    void splice( const_iterator pos, list &other, const_iterator first, const_iterator last); // 从 other 转移范围 [first, last) 的元素到 *this pos 所指元素之前
    void remove( const T& value ); // 移除所有等于 value 的元素

    void remove_if( UnaryPredicate p ); // 移除所有谓词 p 返回 true 的元素
    // 例
    foo.remove_if([](int n) { return n > 10; });

    void reverse(); // 逆转容器中的元素顺序
    void unique(); // 移除所有相继的重复元素,只留下第一个元素
    void sort(); // 以升序排序元素
    void sort( Cpmpare comp ); // 用 comp 来排序元素
# C++

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×