You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::set与std::queue执行增删操作时是否会改变存储元素的内存地址?

问题解答

std::set的内存地址特性

std::set是标准库中的节点式关联容器,底层通常实现为红黑树结构,所有元素都存储在独立的树节点中:

  • 执行插入、删除其他元素的操作时,仅会调整节点之间的指针关联,不会对已有元素所在的节点做移动、拷贝操作
  • 只要元素本身没有被从set中删除,它的内存地址就不会因为其他增删操作发生变更

std::queue的内存地址特性

std::queue本身是容器适配器,本身不负责内存存储,它的地址行为完全由绑定的底层容器决定:

  • 若使用默认的std::deque作为底层实现:std::deque采用分块连续存储的结构,扩容时只会新增内存块,不会移动已有块中的元素,因此增删队头、队尾元素时,所有已存在的元素内存地址都不会改变
  • 若指定std::vector作为底层实现:行为和普通std::vector完全一致,执行push操作触发容器扩容时,所有已有元素都会被拷贝/移动到新的内存空间,地址会全部变更
  • 若指定std::list作为底层实现:属于节点式存储,增删任何元素都不会改变已有元素的内存地址

内容的提问来源于stack exchange,提问作者jojo_Aero_smith_the_dummy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:04