今天的 STL 内容, 我们将学习容器中常用并高效的一个模板类 — list。
list 一般被称为 列表,说它强大,一是因为 list 有非常多的函数支持对数据的各种操作,二是因为大多数操作的速度都非常快。
现在,我们就从初始化开始,学习 STL 列表。
我们先看一份 list 初始化的代码:
#include <iostream>
#include <list>
using namespace std;
int main() {
// 空的 list
list<int> li;
// 指定元素的 list
list<double> ld = {1.2, 3.4};
// 指定数量的 list
list<string> ls{10};
// 指定数量和初始值
list<bool> lb(20, false);
cout << "size of li: " << li.size() << endl;
cout << "size of ld: " << ld.size() << endl;
cout << "size of ls: " << ls.size() << endl;
cout << "size of lb: " << lb.size() << endl;
return 0;
}
/*
output:
size of li: 0
size of ld: 2
size of ls: 10
size of lb: 20
*/
以上代码中,我们演示了四种常用的 list 初始化方式,参看注释,都比较好理解。size() 仍然是获取当前容器数据量的函数。
list, 提供了很多的方法来支持对数据的各种操作,我们先来看存取数据:
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> li = {1, 2, 3};
li.push_front(0);
li.push_back(4);
cout << "front: " << li.front() << endl;
cout << "back: " << li.back() << endl;
cout << "size of li: " << li.size() << endl;
return 0;
}
/*
output:
front: 0
back: 4
size of li: 5
*/
list 的内部实现是双向链表,所以可以在表头和表尾实现添加数据和访问数据的功能,函数分别为:
push_front() 添加表头元素push_back() 添加表尾元素front() 访问表头元素back() 访问表尾元素再来看 list 的修改和删除操作:
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> li = {1, 2, 3};
// 删除表头元素
li.pop_front();
// 删除表尾元素
li.pop_back();
cout << li.size() << endl;
// 插入 2 个 3
li.insert(++li.begin(), 2, 3);
// 循环输出
for (const auto &item : li) {
cout << item << "\t";
}
// 清空列表
li.clear();
if (li.empty()) { // 判断列表是否为空
cout << endl << "列表为空" << endl;
}
return 0;
}
/*
output:
1
2 3 3
列表为空
*/
这段代码中,出现了多个与修改元素有关的函数,它们的作用分别是:
pop_front() 删除表头元素pop_back() 删除表尾元素insert() 插入元素clear() 清空元素empty() 判空