设置int指针的向量,指向int的向量的元素

时间:2016-09-20 10:14:54

标签: c++ pointers vector

我尝试将int的指针向量设置为另一个向量的元素

vector<int> vecInt;
vector<int*> vecPInt;
int main()
{
    vecInt.push_back(1);
    vecPInt.push_back(&vecInt[0]);
    vecInt.push_back(1);
    vecPInt.push_back(&vecInt[1]);
    for(auto v:vecInt)
    {
        cout<<v<<"\n";
    }
    for(auto v:vecPInt)
    {
       cout<<*v<<"\n";
    }

}

但结果是

1

1

11717664

1

还有另一种方法可以做到这一点。但为什么在这种情况下这是行为?

2 个答案:

答案 0 :(得分:5)

第二次将元素推回向量vecInt时,向量的容量会发生变化。分配了两倍大小的新区域,因此旧指针开始指向其他内容。基本上,只要向量的大小达到其容量,就必须重新分配向量,并使所有指向序列中元素的指针无效。
看看When does a std::vector reallocate its memory array?

答案 1 :(得分:3)

我同意另一个答案。访问该地址是未定义的行为,因为您可能正在访问可能最有可能被腾空的地址

使用vector::reserve,问题将一直消失,地址将保持不变。 Demo