2012-11-20 177 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'。你只有一個向量,沒有「較短的向量」。 –