std::list implementation&pointer arithemetic.

std::list implementation & pointer arithemetic.

本文关键字:pointer arithemetic implementation list std      更新时间:2023-10-16

据我所知,std::vector在每次元素增长或收缩时分配/取消分配所需的所有内存,因此可以使用指针算术来迭代向量元素。

另一方面,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。不涉及指针算法。