Cpp Standard Library 简明教程

C++ Library - <list>

Introduction

列表是一个普遍使用的顺序容器。容器是一种存储相同类型数据类型数据的对象。列表容器作为双向链表实现,因此它提供对其数据进行双向顺序访问。

列表不提供快速的随机访问,它仅支持双向顺序访问。列表允许在序列中的任何位置进行插入和删除操作,时间复杂度为常数。

列表的元素可以分散在内存的不同块中。容器存储必要的信息以允许对其数据进行顺序访问。列表可以在运行时根据需要从两端收缩或扩展。存储需求由内部分配器自动满足。

零大小的列表也是有效的。在这种情况下,list.begin() 和 list.end() 指向相同位置。但是调用 front() 或 back() 的行为是未定义的。

Definition

下面是 <list> 头文件中 std::list 的定义

template < class T, class Alloc = allocator<T> > class list;

Parameters

  1. T − 包含元素的类型。T 可以用包括用户自定义类型在内的任何其他数据类型替换。

  2. Alloc − 分配器对象类型。默认情况下,使用分配器类模板,该模板定义最简单的内存分配模型,并且与值无关。

Member types

以下成员类型可作为参数或返回类型,由成员函数使用。

Sr.No.

Member types

Definition

1

value_type

T(模板的第一个参数)

2

allocator_type

Alloc(模板的第二个参数)

3

reference

value_type&

4

const_reference

const value_type&

5

pointer

value_type*

6

const_pointer

const value_type*

7

iterator

值类型的随机访问迭代器

8

const_iterator

const 值类型的随机访问迭代器

9

reverse_iterator

std::reverse_iterator <iterator>

10

const_reverse_iterator

std::reverse_iterator <const_iterator>

11

size_type

size_t

12

difference_type

ptrdiff_t

Functions from <list>

以下是 <list> 头文件中的所有方法的列表。

Constructors

Sr.No.

Method & Description

1

list::list 默认构造函数构造一个空的没有任何元素的列表。

2

list::list fill 构造函数构造一个新的列表,其中包含 n 个元素,并将 val 分配给列表的每个元素。

3

list::list fill 构造函数构造一个新的列表,其中包含 n 个元素,并将零值分配给列表的每个元素。

4

list::list range 构造函数构造一个列表,其中包含从 first 到 last 范围内与元素一样多的元素。

5

list::list 复制构造函数构造一个列表,其中包含存在于现有列表中的每个元素的副本。

6

list::list move 构造函数使用移动语义构造一个包含其他内容的列表。

7

list::list 初始化列表构造函数使用移动语义构造一个包含其他内容的列表。

Destructor

Sr.No.

Method & Description

1

list::~list 通过释放其内存来销毁列表对象。

Member functions

Sr.No.

Method & Description

1

list::assign range 版本通过替换旧值来为列表分配新值。

2

list::assign fill 版本通过替换旧值来为列表分配新值。

3

list::assign 初始化列表版本通过替换旧值来为列表分配新值。

4

list::back 返回对列表最后一个元素的引用。

5

list::begin 返回一个随机访问迭代器,该迭代器指向列表的第一个元素。

6

list::cbegin 返回一个常量随机访问迭代器,该迭代器指向列表的头部。

7

list::cend 返回一个常量随机访问迭代器,该迭代器指向列表的尾部。

8

list::clear 从列表中移除所有元素,并将列表大小设置为零,从而销毁列表。

9

list::crbegin 返回一个常量反向迭代器,该迭代器指向列表的最后一个元素。

10

list::crend 返回一个常量反向迭代器,该迭代器指向列表中第一个元素之前的理论元素。

11

list::emplace 在给定位置插入新元素来扩展列表。

12

list::emplace_back 在列表的尾部插入新元素,并使列表大小增加 1。

13

list::emplace_front 在列表的头部插入新元素,并使列表大小增加 1。

14

list::empty 测试列表是否为空。

15

list::end 返回一个随机访问迭代器,该迭代器指向列表的最后一个元素。

16

list::erase 位置版本从列表中移除单个元素。

17

list::erase 范围版本从列表中移除范围内的元素。

18

list::front 返回对列表中第一个元素的引用。

19

list::get_allocator 返回与列表关联的分配器。

20

list::insert 单个元素版本在列表中的位置插入新元素来扩展迭代器。

21

list::insert 填充版本在容器中插入新元素来扩展列表。

22

list::insert 范围版本在容器中插入新元素来扩展列表。

23

list::insert 移动版本在容器中插入新元素来扩展列表。

24

list::insert 初始化器列表版本 通过在容器中插入新元素,来拓展列表

25

list::max_size 返回列表可以容纳的最大元素数。

26

list::merge 将两个已排序的列表合并为一个。

27

list::merge 比较函数 将两个已排序的列表合并为一个。

28

list::merge 移动版本 通过使用移动语义,将两个已排序的列表合并为一个。

29

list::merge 比较函数 移动版本 通过使用移动语义,将两个已排序的列表合并为一个。

30

list::operator= 复制版本 通过替换旧元素,为列表分配新内容。

31

list::operator= 移动版本 通过替换旧元素,为列表分配新内容。

32

list::operator= 初始化器列表版本 通过替换旧元素,为列表分配新内容。

33

list::pop_back 从列表中删除最后一个元素。

34

list::pop_front 从列表中删除第一个元素。

35

list::push_back 在列表的末尾插入新元素。

36

list::push_back 移动版本 在列表的末尾插入新元素。

37

list::push_front 在列表的开头插入新元素。

38

list::push_front 移动版本 在列表的开头插入新元素。

39

list::rbegin 返回一个反向迭代器,它指向列表的最后一个元素。

40

list::remove 从列表中删除与该值匹配的元素。

41

list::remove_if 从列表中删除满足条件的元素。

42

list::rend 返回一个反向迭代器,它指向列表的相反末尾。

43

list::resize 更改列表的大小。

44

list::resize value 版本更改列表的大小。

45

list::reverse 反转列表中元素的顺序。

46

list::size 返回列表中存在的元素数量。

47

list::sort 对列表中的元素进行排序。

48

list::sort compare 函数对列表中的元素进行排序。

49

list::splice 将列表中的所有元素转移到 *this。

50

list::splice 单个元素将由迭代器 i 指出的元素从列表 x 转移到 *this。

51

list::splice move 版本通过使用移动语义将列表 x 中的所有元素转移到 *this。

52

list::splice 范围版本将 x 中从 first 到 last 范围内的元素转移到 *this。

53

list::splice 单个元素 move 版本通过使用移动语义将由迭代器 i 指出的元素从列表 x 转移到 *this。

54

list::splice 范围和 move 版本通过使用移动语义将 x 中从 first 到 last 范围内的元素转移到 *this。

55

list::swap 将列表的内容与另一个列表 x 的内容交换。

56

list::unique 删除列表中所有连续重复的元素。

57

list::unique 删除列表中所有连续重复的元素。

Non-member overloaded functions

Sr.No.

Method & Description

1

[role="bare"]../cpp_standard_library/cpp_list_operator_equal_to.html 检验两个列表是否相等。

2

operator!= 检验两个列表是否相等。

3

operator< 检验第一个列表是否小于另一个列表。

4

operator⇐ 检验第一个列表是否小于或等于另一个列表。

5

operator> 测试第一个列表是否大于另一个。

6

operator>= 测试第一个列表是否大于或等于另一个。

7

swap 交换两个列表的内容。