C++ 列表 (4.5)
列表是一种以顺序方式存储数据并将非连续内存分配给元素的容器类型。在 C++ 中,列表被认为是双向链表,可以在两端插入和删除元素,因此也可以从两端遍历列表。要使用单向链表,可以使用 C++ STL 中提供的 forward_list。
与向量相比,使用列表的优点是:
如果迭代器定位到正确的元素,列表在插入和删除列表容器中存在的元素方面更快。
使用列表的缺点是:
在列表中,很难通过其位置直接获取容器中存在的元素。例如,如果我们想要获取第四个元素,则很难直接跳转到第四个元素,而是需要迭代器从起始位置或结束位置到达那里。
与列表相关的函数:
**push_front(element)** - 此函数用于在列表的开头插入元素。
**语法** - listName.push_front(数据类型 元素)
**参数** - 它接受一个参数作为要插入的值。
**返回值** - 无返回值。
**push_back(element)** - 此函数用于在列表的末尾插入元素。
**语法** - listName.push_back(数据类型 元素)
**参数** - 它接受一个参数作为要插入的值。
**返回值** - 无返回值。
**insert()** - 此函数用于在列表容器的给定位置插入元素。
**语法** - listName.insert(位置, 总数, 元素)
**参数** - 它接受三个参数 -
位置,需要在其中插入元素的位置
总数,指定要插入的元素总数
元素指定要插入的元素。
**返回值** - 返回指向新插入元素开头的迭代器。
**pop_front()** - 此函数用于从列表的开头删除元素。
**语法** - listName.pop_front()
**参数** - 无参数
**返回值** - 无返回值
**front()** - 此函数用于获取列表的第一个元素。
**语法** - listName.front()
**参数** - 无参数
**返回值** - 此函数返回对第一个元素的直接引用
**pop_back()** - 此函数用于从列表的末尾删除元素。
**语法** - listName.pop_back()
**参数** - 无参数
**返回值** - 无返回值
**back()** - 此函数用于获取列表的最后一个元素。
**语法** - listName.back()
**参数** - 无参数
**返回值** - 此函数返回对最后一个元素的直接引用
**size()** - 此函数用于获取列表中元素的总数。
**语法** - listName.size()
**参数** - 无参数
**返回值** - 此函数返回列表中元素的总数。
**resize()** - 此函数用于调整列表中元素的总数。
**语法** - listName.resize(int 重设大小, 值(可选))
**参数** - 它接受两个参数
**重设大小** - 容器大小要增加或减少到的确切数字
**值(可选)** - 这是一个可选参数,它将把指定的值添加到元素的末尾。
**返回值** - 无返回值。
**max_size()** - 此函数用于获取列表可以具有的最大元素数。
**语法** - listName.max_size()
**参数** - 无参数
**返回值** - 此函数返回列表可以具有的最大元素数。
**clear()** - 此函数用于删除列表中的所有元素并将大小重置为 0。
**语法** - listName.max_size()
**参数** - 无参数
**返回值** - 无返回值。
**remove(element)** - 此函数用于删除与参数中传递的元素匹配的所有元素。
**语法** - listName.remove(元素)
**参数** - 它接受一个参数,该参数指定要从列表容器中删除的元素。
**返回值** - 无返回值。
**remove_if(函数指针/函数对象)** - 此函数用于根据参数中传递的条件删除与参数中传递的元素匹配的所有元素。
**语法** - listName.remove_if(函数指针/函数对象)
**参数** - 它接受函数指针或函数对象作为单个参数。
**返回值** - 删除所有元素时返回 true。
**erase()** - 此函数用于根据传递给它的参数删除单个元素以及多个元素
**语法** - 迭代器 listName.erase(迭代器 位置) 迭代器 listName.erase(迭代器 第一个元素, 迭代器 最后一个元素)
**参数** - 在第一个语法中,它接受参数位置,该参数指定将从列表容器中删除元素的位置。在第二个语法中,它接受参数第一个元素和最后一个元素,它们指定将从中删除元素的范围
**返回值** - 它返回一个指向最后删除元素的迭代器。
**empty()** - 此函数用于检查列表是否为空。
**语法** - listName.empty()
**参数** - 无参数
返回值 -
返回 true - 列表为空时
返回 false - 列表不为空时。
**begin()** - 此函数返回一个指向列表中第一个元素的迭代器。
**语法** - listName.begin()
**参数** - 无参数
**返回值** - 返回一个指向列表中第一个元素的迭代器。
**end()** - 此函数返回一个指向列表中最后一个元素的迭代器。
**语法** - listName.end()
**参数** - 无参数
**返回值** - 返回一个指向列表中末尾元素的迭代器。
**rbegin()** - 此函数返回一个反向迭代器,该迭代器指向列表中的最后一个元素。
**语法** - listName.rbegin()
**参数** - 无参数
**返回值** - 返回一个反向迭代器,该迭代器指向列表中末尾元素。**rend()** - 此函数返回一个反向迭代器,该迭代器指向列表中的第一个元素。
**语法** - listName.rend()
**参数** - 无参数
**返回值** - 返回一个反向迭代器,该迭代器指向列表中第一个元素。
**cbegin()** - 此函数用于返回一个指向列表开头的常量随机访问迭代器。
**语法** - listName.cbegin()
**参数** - 无参数
**返回值** - 返回一个指向列表开头的常量随机访问迭代器。
**cend()** - 此函数用于返回一个指向列表末尾的常量随机访问迭代器。
**语法** - listName.cend()
**参数** - 无参数
**返回值** - 返回一个指向列表末尾的常量随机访问迭代器。
**crbegin()** - 此函数用于返回一个指向列表末尾的常量随机访问反向迭代器。
**语法** - listName.crbegin()
**参数** - 无参数
**返回值** - 返回一个指向列表末尾的常量随机访问反向迭代器。
**crend()** - 此函数用于返回一个指向列表开头的常量随机访问反向迭代器。
**语法** - listName.crend()
**参数** - 无参数
**返回值** - 返回一个指向列表开头的常量随机访问反向迭代器。
**reverse()** - 此函数用于反转列表容器中的所有元素。
**语法** - listName.reverse()
**参数** - 无参数
**返回值** - 无返回值
**unique()** - 此函数用于从列表中删除所有重复的连续元素。
**语法** - listName.unique(将两个值视为相同的谓词)
**参数** - 它接受一个可选参数,当需要将两个元素视为相同时返回 true。
**返回值** - 无返回值
**emplace()** - 此函数用于在给定位置插入新元素。
**语法** - listName.emplace(位置, 值)
**参数** - 它接受两个参数,一个指定需要在其中插入元素的位置,另一个指定需要插入的元素值。
**返回值** - 返回一个指向新插入元素的迭代器。
emplace_front() - 此函数用于在列表开头插入新元素。
语法 - listName.emplace_front(element)
参数 - 它接受一个参数,指定要插入的值。
返回值 - 无返回值。
emplace_back() - 此函数用于在列表末尾插入新元素。
语法 - listName.emplace_back(element)
参数 - 它接受一个参数,指定要插入的值。
返回值 - 无返回值。
赋值运算符(=) - 此运算符用于将一个列表的内容替换为另一个列表的内容。
语法 - listName_1 = listName_2
**参数** - 无参数
返回值 - 无返回值。
swap() - 此函数用于交换两个相同类型列表的内容。
语法 - listName_1.swap(listName_2)
**参数** - 无参数
返回值 - 无返回值。
merge() - 此函数用于合并两个列表的元素。
语法 - listName_1.merge(listName_2)
**参数** - 无参数
返回值 - 无返回值。