Skip to Content
项目C++ List STL

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 迭代器的思想。
  • 可以先实现一个非模板类,后期再用模板进行替换。

时间

年级开始时间截止时间
20222023-04-202023-05-12

参考资料

Last updated on