如何将指针分配给 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时,如果数组需要调整大小,现在每个指针都将无效。如果你从数组的开头擦除一个元素,你存储在那里的每个指针值都将无效。
在此特定情况下,您最好使用整数索引。当您从向量中删除元素时(即递减每个大于您要删除的索引的索引),这仍然会导致问题,但至少在添加元素时不会出现问题。
我正在尝试创建树状节点层次结构。 每个 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时,如果数组需要调整大小,现在每个指针都将无效。如果你从数组的开头擦除一个元素,你存储在那里的每个指针值都将无效。
在此特定情况下,您最好使用整数索引。当您从向量中删除元素时(即递减每个大于您要删除的索引的索引),这仍然会导致问题,但至少在添加元素时不会出现问题。