C++ std::list容器的用法(附带实例)
list 容器以类模板 list<T> 的形式定义在 <list> 头文件中,并位于命名空间 std 中。因此,使用该容器前需先引入 <list> 头文件,并使用 std 命令空间:
使用 list 容器需要创建 list 对象,创建方法有以下 5 种:
1) 创建空的 list 对象,语法格式如下:
2) 创建一个大小为 size 的 list 对象,语法格式如下:
3) 创建一个大小为 size 的 list 对象,并将各元素值初始化为 value,语法格式如下:
4) 使用复制构造函数,通过已有的 list 对象创建新的 list 对象,语法格式如下:
5) 创建元素在指定范围内的链表,first 代表起始位置,last 代表结束位置,语法格式如下:
list 容器的成员函数见下表:
【实例】从小到大排序。用 list 和 vector 迭代器将数据排序。具体代码如下:
#include <list> using namespace std;
使用 list 容器需要创建 list 对象,创建方法有以下 5 种:
1) 创建空的 list 对象,语法格式如下:
std::list<type> name;例如,创建一个可容纳 int 型元素的空对象 intlist,代码如下:
std::list <int> intlist;
2) 创建一个大小为 size 的 list 对象,语法格式如下:
std::list<type> name(size);
3) 创建一个大小为 size 的 list 对象,并将各元素值初始化为 value,语法格式如下:
std::list<type> name(size,value);
4) 使用复制构造函数,通过已有的 list 对象创建新的 list 对象,语法格式如下:
std::list<type> name(mylist);
5) 创建元素在指定范围内的链表,first 代表起始位置,last 代表结束位置,语法格式如下:
std::list<type> name(first,last);
list 容器的成员函数见下表:
函数 | 说明 |
---|---|
begin() | 返回指向序列第一个元素的迭代器 |
end() | 返回指向序列最后一个元素的迭代器 |
rbegin() | 返回一个反向迭代器,指向序列最后一个元素 |
rend() | 返回一个反向迭代器,指向序列第一个元素 |
cbegin() | 与begin()类似,但增加了const属性,不能修改元素的值 |
cend() | 与end()类似,但增加了const属性,不能修改元素的值 |
crbegin() | 与rbegin()类似,但增加了const属性,不能修改元素的值 |
crend() | 与rend()类似,但增加了const属性,不能修改元素的值 |
assign() | 用新元素替换原有内容 |
operator=() | 复制同类型容器的元素,或者用初始化列表替换现有内容 |
size() | 返回序列的大小(即元素个数) |
max_size() | 返回 STL 允许的最大容量,一般为 2^32-1,该函数很少用到 |
resize() | 重新设定序列的大小 |
empty() | 判断序列是否为空。如果为空,返回 true;否则返回 false |
front() | 返回对序列第一个元素的引用 |
back() | 返回对序列最后一个元素的引用 |
push_back() | 在序列末尾添加一个元素 |
push_front() | 在序列起始位置添加一个元素 |
emplace() | 在指定位置生成一个元素 |
emplace_back() | 在序列的末尾生成一个元素 |
emplace_front() | 在序列的起始位置生成一个元素 |
insert() | 在指定位置插入一个或多个元素 |
pop_back() | 移除序列尾部的元素 |
pop_front() | 移除序列头部的元素 |
reverse() | 反转某一段元素 |
erase() | 移除指定位置的一个元素或一段元素 |
remove() | 移除所有和参数匹配的元素 |
remove_if() | 移除满足函数条件的所有元素 |
unique() | 移除所有连续重复的元素 |
clear() | 移除所有的元素,序列大小变为 0 |
swap() | 交换两个序列的所有元素 |
sort() | 对元素进行排序 |
merge() | 合并两个有序序列 |
splice() | 移动指定位置前面的所有元素到另一个同类型的 list 中 |
【实例】从小到大排序。用 list 和 vector 迭代器将数据排序。具体代码如下:
#include <iostream> #include <list> #include <vector> using namespace std; int main() { cout << "使用未排序存储 0-9 的数组初始化 list1" << endl; int array[10] = {1, 3, 5, 7, 8, 9, 2, 4, 6, 0}; list<int> list1(array, array+10); cout << "list1 调用 sort 方法排序" << endl; list1.sort(); // 对元素进行排序 list<int>::iterator iter = list1.begin(); // 迭代器指向 list1 的第一个元素 // iter = iter+5 list 的 iter 不支持+运算符 cout << "通过迭代器访问 list 双向链表中从头开始向后的第 4 个元素" << endl; for(int i = 0; i<3; i++) { // 迭代器自增 3 次,指向第 4 个元素 iter++; } cout << *iter << endl; list1.insert(list1.end(), 13); // 在序列末尾插入 13 cout << "在末尾插入数字 13" << endl; for(list<int>::iterator it = list1.begin(); it != list1.end(); it++) // 输出 list1 各元素的值 { cout << " " << *it; } }程序运行结果为:
使用未排序存储 0-9 的数组初始化 list1
list1 调用 sort 方法排序
通过迭代器访问 list 双向链表中从头开始向后的第 4 个元素
3
在末尾插入数字 13
0 1 2 3 4 5 6 7 8 9 13