C++ C++;非连续容器(如deque)的迭代器如何查找下一个元素

C++ C++;非连续容器(如deque)的迭代器如何查找下一个元素,c++,C++,从这个开始 我想知道,如果不能保证下一个元素紧跟在这个元素之后,那么非连续且不是链表的容器如何知道在哪里找到下一个元素?是否有一个额外的表说明deque的前x个块位于该起点,下一个y个块从那里开始,依此类推?容器在内部保留直接访问元素所需的信息,因为deque的内部实现基本上是一个双端块队列(向量)。每个区块都有索引元素,一旦区块已满,就会添加另一个区块,以保持索引的完整性,容器类会保留提供访问所需的信息,定位正确的区块,然后找到所需元素的索引位置 您可以在这里阅读这篇伟大的文章,它将提供您所寻

从这个开始


我想知道,如果不能保证下一个元素紧跟在这个元素之后,那么非连续且不是链表的容器如何知道在哪里找到下一个元素?是否有一个额外的表说明deque的前x个块位于该起点,下一个y个块从那里开始,依此类推?

容器在内部保留直接访问元素所需的信息,因为deque的内部实现基本上是一个双端块队列(向量)。每个区块都有索引元素,一旦区块已满,就会添加另一个区块,以保持索引的完整性,容器类会保留提供访问所需的信息,定位正确的区块,然后找到所需元素的索引位置

您可以在这里阅读这篇伟大的文章,它将提供您所寻求的所有知识,甚至比您所寻求的更多:

还要了解deque的简要实现,您可以查看关于堆栈溢出的公认答案

迭代器类包含足够的信息,可以知道如何查找下一个元素。例如,deque迭代器的一种工作方式是保存指向当前“块”的指针,并保存选择块中项目的索引所以它可以访问容器的内部信息。@M.M我的问题是解释它如何知道不同的块在哪里。谢谢Michael,我想我应该问一下deques自己是如何存储这些信息的。所以,根据你的回答,我猜每个deque都有一个表,上面有所有块的位置?迭代器是否可以访问该列表?@chrise-是的,deque迭代器的一个实现可以是“块表”中的迭代器和当前块中的索引或指针。