std::list 实现和指针算法。

std::list implementation & pointer arithemetic.

据我了解,std::vector allocates/de-allocates 每次元素增长或收缩时它需要的所有内存,因此指针算法可用于迭代向量元素。

std::list 另一方面使用双链表,每个元素指向下一个和上一个元素。

假设(可能是错误的)std::list 动态分配它的内存,因此如果需要,则增量分配内存。 std::list 如何仍然能够提供指针算法作为迭代其元素的方法?

粗略地说,您可以假设 std::list::iterator 是指向列表元素 struct iterator { list::element *current }; 的指针的容器。并且一个元素具有指向下一个和上一个元素的指针,例如 struct element { list::element *next, *previous }; 当您递增该迭代器时,它只是将此指针重新分配为指向下一个元素。就像链表中的 it->current = it->current->next 一样。不涉及指针运算。