如何将指针分配给 std::vector 中的现有变量?

How do you assign a pointer to an existing variable in a std::vector?

我正在尝试创建树状节点层次结构。 每个 Node 都存储在 std::vector 中,并有一个 int 值和一个 Node* parent,指向向量中的另一个 Node,在本例中是最近添加的元素。看起来父值未初始化但不确定是怎么回事。任何帮助将不胜感激。

struct Node
{
    Node(int v = -1, Node* p = nullptr) : value(v), parent(p) {}
    int value;
    Node* parent;
};

int main()
{
    std::vector<Node> m_vector;
    m_vector.push_back(Node(1));

    Node n1 = m_vector.back();
    m_vector.push_back(Node(2, &m_vector[0]));
}

// m_vector[1].parent->value = -572662307.

简答:!!!不要 !!!

完全有可能当你调用push_back时,如果数组需要调整大小,现在每个指针都将无效。如果你从数组的开头擦除一个元素,你存储在那里的每个指针值都将无效。

在此特定情况下,您最好使用整数索引。当您从向量中删除元素时(即递减每个大于您要删除的索引的索引),这仍然会导致问题,但至少在添加元素时不会出现问题。