2012-11-20 229 views
0

对于下面的代码的载体:从一个指针删除的指针

vector<int*> x; 
vector<int*>* p; 

// say I initiated x with a couple of integers 
p = &x; 

//erases the indicie of the given integer 
void erase(vector<int*> &x, int n){ 
    int i = 0; 
    while (*(x[i]) != n){ 
    i++; 
    } 
    delete x[i]; 
    x.erase(x.begin() + i); 
} 

如果我调用的代码erase(*p, 2);我想现在设置p到已删除该向量的这个地址...我'尝试p = &(*p); ..但这并不奏效,我得到了一个分割错误,有什么想法?

+0

你需要更好地解释它。目前完全不清楚。 “我想现在将p设置为已删除的矢量地址” - 这是什么意思?你的代码中没有矢量被擦除,没有理由用'p'做任何事情。 – AnT

+0

基本上想要p是这个新的向量的地址,因为擦除了这个向量并删除了某个标记。 –

+0

@约翰史密斯,没有新的矢量。旧的矢量是唯一的矢量。它通过调用“擦除”而持续存在。 –

回答

2

你不应该做任何事情。 p仍然指向&x,就像您在拨打erase()之前所做的一样。从矢量中删除元素不会更改矢量的地址。

+0

所以在我调用擦除(* p,2)后,p现在将成为较短向量的向量的地址。 ? –

+0

'p'将保持不变,并将继续指向'x'。你只有一个向量,没有“较短的向量”。 –