首页 > 解决方案 > 如何将指针分配给 std::vector 中的现有变量?

问题描述

我正在尝试创建一个树状的节点层次结构。每个 Node 都存储在 std::vector 中,并具有一个 int 值和一个 Node* 父级,指向向量中的另一个 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.

标签: pointersreferencestdvector

解决方案


简短的回答:!!!不 !!!

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

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


推荐阅读