C++ 从指针到指针向量的擦除

C++ 从指针到指针向量的擦除,c++,pointers,vector,delete-operator,C++,Pointers,Vector,Delete Operator,对于以下代码: 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++;

对于以下代码:

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);
}
向量x;
向量*p;
//假设我用两个整数初始化了x
p=&x;
//删除给定整数的标记
无效擦除(向量&x,整数n){
int i=0;
而(*(x[i])!=n){
i++;
}
删除x[i];
x、 擦除(x.begin()+i);
}

如果我调用代码
erase(*p,2)
我现在想将
p
设置到这个已被擦除的向量的地址。。。我正在尝试
p=&(*p)。。但这不起作用,而且我有一个分段错误,有什么想法吗?

你不应该做任何事情
p
仍然指向
&x
,就像调用
erase()
之前一样。从向量中删除元素不会改变向量的地址。

您需要更好地解释它。目前还完全不清楚。“我现在想把p设为这个向量的地址,这个地址已经被删除了”-这是什么意思?代码中没有矢量被擦除,也没有理由对
p
执行任何操作。基本上希望p是这个新矢量的地址,因为擦除取了那个矢量并删除了某个标记。@JohnSmith,没有新矢量。旧向量是唯一的向量。它通过调用<代码>擦除< /代码> .@ JohnSmith -考虑程序及其输出。因此,在调用ErASE(*p,2)之后,p现在是一个较短向量的向量的地址。code>p
将保持不变,并将继续指向
x
。你只有一个向量,没有“短向量”。