C ++-弹出向量的第一个元素

时间:2019-05-17 10:51:05

标签: c++ vector erase binary-heap

很抱歉,如果这是重复的。我保证我会先找到答案。

我想使用向量创建二进制堆。为此,我必须实现一个弹出功能,以删除“顶部”。在这种情况下,它只是删除了第一个元素。

我尝试使用移动功能,例如:

items[Root()] = std::move(items[cur_size--]);

这应该将根与另一个元素交换,然后将其重新排序(这也一直没有起作用)。

相反,我尝试了以下方法:

std::vector<int> items;
int root = 0;
size_t Root() {
  return root;
}

void Pop() {
  items.erase(items.begin()+root);
  root++;
  // here I would call the reorder function
}

通过这种方式,我将有效地更改根并像矢量从第n个位置(而不是从0开始)开始操作。

我的问题是,这有意义吗,还是有一种更好的方法可以实现呢?

编辑:添加的向量

1 个答案:

答案 0 :(得分:0)

要弹出std::vector的第一个元素(简称为myvector),只需编写:

myvector.erase(myvector.begin()); // pop front

现在,如果您将二叉树存储在std::vector中,则删除根将使您剩下两个孩子(两个根)。

如果您只想保留两个子树之一,则需要选择一个(新的根)。
然后,根据您的std::vector是否将二叉树存储在其中 宽度优先 深度优先 ,您必须搜索与子树相关的所有元素您想要保留(Breadth-first searchDepth-first search)并使用所需的子树构建另一个std::vector。最后,您将计算出的子树影响到原始树向量。


我希望这会对您有所帮助。