【发布时间】:2015-02-11 19:58:32
【问题描述】:
据我了解,std::vector 会在每次元素增长或缩小时分配/取消分配所需的所有内存,因此可以使用指针算法来迭代向量元素。
另一方面,std::list 使用双链表,每个元素都指向下一个和上一个元素。
假设(可能是错误的)std::list 动态分配它的内存,所以如果需要的话,内存是增量分配的。 std::list 如何仍然能够提供指针算术作为迭代它的元素的一种手段?。
【问题讨论】:
-
std::list不提供迭代指针算法。 -
你能举一个你认为
std::list允许的例子吗? -
std::list的迭代器只能单步递增或递减。你不能说it += 5或it + 42。这就是我在第一条评论中的意思,我意识到这并不完全清楚。但你的问题也不是。 -
std::list的元素具有指向前一个元素和下一个元素的指针。运算符增量it++使用这些指针将其移动到下一个元素。这只是一个指针赋值,实际上并没有发生任何算术运算。 -
std::list 迭代器有一个 std::bidirectional_iterator_tag,因此没有算术,只是递增/递减
标签: c++ stdvector allocation doubly-linked-list stdlist