c++ - vector模板的make_heap方法是如何工作的?

标签 c++ data-structures vector

当我使用 STL vector 容器的“make_heap”方法时,它会改变元素的物理地址还是只是逻辑上改变顺序(通过某个类成员)

让我解释一下:

假设我使用以下结构实现堆

struct heap
{

    int cost;
    struct heap* leftChild;
    struct heap* rightChild;

};

我可以确保只有结构内部的指针发生变化。但不是物理地址。 vector 的 make_heap 是这样做的吗?

我问这个问题的原因是我有另一个指向堆元素的对象。我想确保即使堆发生变化我也不需要更新这个指针。

最佳答案

我猜你指的是 std::make_heapvector 的迭代器作为参数。在这种情况下,它只会重新排列 vector 中的元素,而不会导致任何重新分配,因此您可以安全地假设指向 vector 元素的指针(或迭代器)即使在调用 make_heap 之后也将保持有效。

关于c++ - vector模板的make_heap方法是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5025402/

相关文章:

c++ - yyparse() 未在 Bison/Flex C++ 项目中仅针对某些版本的 gcc/bison/flex 声明

c - 如何从c中自定义类型的节点列表中读取数据结构

c++ - 旅行商启发式

r - 使用相对于向量中第一个值的值填充空向量

c++ - 如何在给定指向它的指针的情况下从 vector 中删除元素 - C++

C++ - 整数类型的数组

c++ - C 与 C++ 中的 Pthread 之间的差异

java - 从树中选择随机节点

data-structures - 理解异或链表的问题

c++ - 无法在我的 C++ 代码中执行超过 1 行