C++ List STL
前置 C++ 语言知识
类和对象
:构造函数,析构函数,拷贝构造(深拷贝/浅拷贝),拷贝赋值模板
:使用模板来实现泛型编程,支持存储各种类型STL 迭代器的思想
:STL 容器使用迭代器来进行封装统一接口,忽略底层复杂的实现逻辑operator 重载
:使用 operator 重载常用的操作符,如[]
,++
,--
,*
,->
C++ 基本语法与关键词
:引用,初始化列表,缺省值,auto,nullptr函数重载
介绍
如果同学们应该都了解过 C 语言的实现一个带头双向循环链表,或许也使用过 C++ 的 STL 库中的 list 容器。下面是 list 的基本操作示例:
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> l;
l.push_back(1);
l.push_front(2);
l.push_back(3);
l.pop_back();
auto it = l.begin();
while (it != l.end())
{
cout << (*it) << endl;
it++;
}
return 0;
}
运行上述代码会得到如下结果:
2
1
你或许会疑惑 l.begin()
是什么类型,为什么能够进行 *
解引用,同时还能使用 ++
?
这就要谈到 STL 容器,它使用了迭代器,将各种常见的操作符都进行了重载,如 []
,++
,--
,*
,->
。
经过重载之后,使用者就无需了解该类型底层的实现,同时降低了使用成本。
list 类的实现
list.hpp 中定义了需要实现的函数与类,完成这个文件中的所有函数。
test.cpp 中有相应的使用和测试。
注意:
- 先安装 gtest,不会的话问万能的 GPT 如何安装。
- 需要完成大部分的函数才能编译通过,或将 test.cpp 中未完成的函数测试用例先注释掉。
编译:
cd list
mkdir build
cd build
cmake ..
make
建议
- 先掌握 STL 容器的使用。
- 掌握 STL 迭代器的思想。
- 可以先实现一个非模板类,后期再用模板进行替换。
时间
往期任务时间
2022级:2023-04-20 ~ 2023-05-12