std :: list implementation&指针算术。

时间:2015-02-11 19:58:33

标签: c++ stdvector allocation doubly-linked-list stdlist

据我了解,std :: vector在每次元素增长或缩小时分配/解除分配所需的所有内存,因此可以使用指针算法迭代向量元素。

另一方面,

std :: list使用双链表,每个元素指向下一个和前一个元素。

假设(可能错误地)std :: list动态分配它的内存,因此在需要时,以递增方式分配内存。 std :: list如何能够提供指针算法作为迭代它的元素的手段?

1 个答案:

答案 0 :(得分:3)

粗略地说,您可以假设std::list::iterator是指向列表元素struct iterator { list::element *current };的指针的容器。并且元素具有指向下一个和前一个的指针,如struct element { list::element *next, *previous };当您递增该迭代器时,它只是将此指针重新指定为指向下一个元素。与链接列表中的it->current = it->current->next类似。没有涉及指针算术。