我将结构插入到向量中,但向量中所有元素的地址都是相同的

I insert struct to vector,but address of all the elements of vector are same

本文关键字:向量 元素 地址 结构 插入      更新时间:2023-10-16

我声明了一个结构树节点

struct treenode {
    int val;
    treenode *l;
    treenode *r;
};

和矢量

vector<int> v = { 1,2,3,4,5,6,7,8,9 };

现在我想创建一个矢量电视来存储v 的值

vector<treenode* > tv;
for (int i = 0; i < v.size(); i++)
    {
        treenode mid;
        mid.val = v[i];
        mid.l = NULL;
        mid.r = NULL;
        tv.push_back(&mid);
    }

但是当我打印电视的值时,我发现电视的所有元素都是相同的(相同的地址),有9个。我很困惑,我每次迭代都要创建一个新的树节点,为什么所有元素都使用相同的地址在此处输入图像描述

您有一个悬挂指针的向量。只需按价值存储

vector<treenode> tv;
for (int i = 0; i < v.size(); i++)
{
    treenode mid;
    mid.val = v[i];
    mid.l = NULL;
    mid.r = NULL;
    tv.push_back(mid);
}

否则,您会不断地将指针推回到迭代之间超出范围的临时变量mid