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
一样。不涉及指针运算。
据我了解,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
一样。不涉及指针运算。