pointers - 如何将指针分配给 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.
解决方案
简短的回答:!!!不 !!!
完全有可能在调用 push_back 时,如果需要调整数组大小,现在每个指针都将无效。如果从数组的开头擦除一个元素,则存储在那里的每个指针值都将无效。
在这种特殊情况下,您最好使用整数索引。当您从向量中删除元素时,这仍然会导致问题(即减少每个大于您正在擦除的索引的索引),但至少在添加元素时您不会遇到问题。
推荐阅读
- airflow - 气流 on_success_callback() 不运行
- java - 使用 JsonTypeInfo.As.EXTERNAL_PROPERTY 而不指定 @JsonSubTypes
- java - 可以在方法调用中调用 testng 注释吗?
- json - 使用 jq 从数组中选择特定项目
- angular - 角度 2+ 中的掩码数到哈希格式
- laravel-nova - Laravel Nova Action - 附加多个数据透视记录
- excel - 使用 Google Maps API 密钥计算 Excel 距离
- android - 如何解决有关“使用短信或通话记录权限组”的谷歌播放警告
- python - Django ORM: Min('field',filter=...) 导致 TypeError: can only concatenate list (not "tuple") to list
- javascript - 无法通过 Javascript 执行 Switch Card