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
ICP备案:
公安联网备案: