今天的 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()
判空