C++ 使用push_back()时指针的向量指向NULL

C++ 使用push_back()时指针的向量指向NULL,c++,pointers,vector,C++,Pointers,Vector,我的代码中有以下结构,它随机分配x和y生成的整数值: struct A{ int x,y; A () : x(random_gen_num),y(random_gen_num) {}; }; 我有一个对象向量,需要一个指向每个对象的指针向量: vector<A> a(5); a.reserve(5); vector<const A*> apoint(5); apoint.reserve(5); for(const A thisA : a){

我的代码中有以下结构,它随机分配x和y生成的整数值:

struct A{
    int x,y;
    A () : x(random_gen_num),y(random_gen_num) {};   
};
我有一个对象向量,需要一个指向每个对象的指针向量:

vector<A> a(5);
a.reserve(5);

vector<const A*> apoint(5);
apoint.reserve(5);
for(const A thisA : a){
    apoint.push_back(&thisA);
}
在我看来,当我在for循环中说
apoint[I]=&a[I]
时,代码似乎是合乎逻辑的,但在实际情况下,这是无效的,因为
apoint
a
的索引可能不相同。据我所知,我找不到一个有类似问题的答案。有没有更好的方法将指针插入向量

for(const A thisA : a){
    apoint.push_back(&thisA);
}
推送的指针在下一个循环中不再有效。您需要一个引用(
a&

当然,假设你真的需要一个指针向量(你呢?)

打印出这5个空指针,然后它将到达通过
推回
添加的5个空指针。改变

vector<const A*> apoint(5);
需要进一步细分才能发现第二个bug
const A thisA:A
复制
A
中的元素,这些元素只存在于
for
循环的单个迭代中。这些指针太短暂,对您没有任何用处。您希望引用
a
中的值,而不是副本,因此

for(const A thisA : a){
    apoint.push_back(&thisA);
}
需要

for(const A & thisA : a){
    apoint.push_back(&thisA);
}

关于在
vector
s中存储对项目的引用的注意事项:这通常是个坏主意。如果你提出一个新问题并解释你的目标,我们可能会提出更好的选择。如果您确实需要指向
向量
元素的指针,请小心不要违反。

请提供一个,您试图解决的实际问题是什么?为什么您认为需要指向另一个向量中对象的指针向量?是的,不清楚为什么需要
apoint
。当你想知道
a
中某个元素的地址时,只需使用
&a[i]
,尽管我怀疑你是否需要它。是的,需要一个指针向量,因为在实际的程序中,我想把它转换到另一个函数进行计算。但是,谢谢。我并没有考虑thisA的范围。
apoint
包含十个指针–五个空指针,后跟五个悬空指针。
for(unsigned int i = 0; i<5; i++){
    cout<< i <<"\t"<< a[i].x <<"\t" << &a[i]<<"\t" << apoint[i] <<endl;
}
vector<const A*> apoint(5);
vector<const A*> apoint;
for(const A thisA : a){
    apoint.push_back(&thisA);
}
for(const A thisA : a){
    apoint.push_back(&thisA);
}
for(const A & thisA : a){
    apoint.push_back(&thisA);
}