C++:STL组件介绍
迪丽瓦拉
2024-03-22 22:19:27
0

标题

    • 迭代器
      • 迭代器和指针的区别
      • 迭代器失效
      • 解决
    • 空间配置器:

STL将常见的数据结构以模板的方式进行封装,还增加了一些灵活通用的算法

迭代器

Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照iterator提供的方法访问聚合对象中的各个元素

迭代器和指针的区别

迭代器不是指针,是类模板,表现的像指针。
只是模拟了指针的一些功能,通过重载了指针的一些操作符,->、*、++、–等。本质是封装了原生指针,根据不同类型的数据结构来实现不同的++,–等操作。

迭代器失效

vector所有的插入和扩容操作可能会出现,swap,赋值=,删除

  • vector的扩容会生成新空间,并进行拷贝到新空间释放原空间,迭代器还指向
    原来的空间
  • 删除pos位置的元素,删除成功,迭代器失效

解决

在迭代器可能会失效的操作之后,要重新使用迭代器,就需要对迭代器进行重新赋值,erase就会返回下一个有效迭代器

  • 对于关联容器map set来说,使用erase后,当前元素的迭代器失效,但是其结构是红黑树,删除当前元素,不会影响到下一个元素的迭代器,
  • 所以在调用erase之前,记录下一个元素的迭代器即可。

空间配置器:

STL allocator将两个阶段操作区分开来:

  • 内存配置有allocate()负责,内存释放由deallocate()负责;
  • 对象构造由construct()负责,对象析构由::destroy()负责。
  • 例如vector里面申请空间就使用的空间配置器,malloc和new不适应于频繁的申请空间

相关内容