迭代器,通常指的是STL中容器的指针封装,用于指向容器中的元素。 1、序列容器 1)内存连续,如vector。 删除(erase)一个元素,会导致其后面的元素都向前移动,则对应的迭代器都会失效。 尾部添加(push_back)一个元素,如果引起内存重新分配,则迭代器全部失效。 2)内存不连续,如list。 删除(erase)一个元素,只有当前元...
迭代器是一个“可以遍历STL容器内全部或部分元素”的对象,在操作上有点类似C语言中的指针,不同的是:迭代器是个所谓的“smart pointer”,具有遍历复杂数据结构的能力,根据不同的容器具有不同的操作行为。迭代器被分为不同的类型,如图1所示;其能力列表如图表1。 图1 迭代器类型 表1 迭代器能力 Input迭代器 inpu...
迭代器失效是指迭代器在遍历容器过程中,由于容器的结构发生改变而导致迭代器指向的元素不再有效。 以下是导致迭代器失效的常见情况: 插入和删除操作: 当在容器中插入或删除元素时,可能会导致容器内存重新分配或元素位置的改变,这可能会使迭代器失效。 清空容器: 清空容器会使容器内的所有元素被删除,这样迭代器指向的...
迭代器是STL中的一个重要组成部分,然而在某些操作中,如果对容器进行了插入或删除操作,可能会导致已有的迭代器失效。如果继续使用这些失效的迭代器,很可能会导致未定义的行为,甚至可能导致内存泄漏。 例如,对于std::vector,当我们使用push_back插入新的元素时,如果vector的容量不够,那么会导致所有的迭代器、指针和引用...
排序操作:如果在排序过程中,容器的元素被移动了位置,迭代器可能会失效。 deque 的实现原理 分段连续内存、中控器 deque 是由一段一段的连续空间构成。 deque 采取一块所谓的 map(不是 STL 的 map 容器)作为主控,这里所谓的 map 是一小块连续的内存空间,其中的每个元素(此处成为一个结点)都是一个指针,指向另...
排序操作:如果在排序过程中,容器的元素被移动了位置,迭代器可能会失效。 deque 的实现原理 分段连续内存、中控器deque 是由一段一段的连续空间构成。 deque 采取一块所谓的 map(不是 STL 的 map 容器)作为主控,这里所谓的 map 是一小块连续的内存空间,其中的每个元素(此处成为一个结点)都是一个指针,指向另一...
1.迭代器 (1)迭代器的本质 循环结构有两种控制方式:标志控制和计数控制。迭代器可以把这两种标志控制的循环统一为一种控制方法:迭代器控制,每一次迭代操作中对迭代器的修改就等价于修改标志或计数器。 在STL中,容器的迭代器被作为容器元素对象或者I/O流中的对象的位置指示器,因此可以把它理解为面向对象的指针——...
STL容器的遍历删除要小心迭代器失效 vector,list,map,set等各有不同的写法: 有时候遍历删除的逻辑不是这么明显,可能循环里调了另一个函数,而该函数在某种特定的情况下才会删除当前元素,这样的话,就是很长一段时间,程序都运行得好好的,而当你正跟别人谈笑风生的时候,忽然crash,这就尴尬了。
Pascal 语言的设计者 N. Wirth 提出过一个著名的公式:算法 数据结构=程序。数据结构即通用容器,算法还需要操作这些通用容器,但是如何操纵这些容器呢?迭代器提供了一种简洁的记法解决这些问题。迭代器扩展了指针的概念,使得存取容器变得异常容易,同时迭代器也具有非常好的可扩展性。