C++删除向量中的元素

Ggb*_*oi 4 c++ vector

int main(){     

vector<Customer*> newcustomer;

newcustomer.push_back(new Customer("III", 123333, 555));
newcustomer.push_back(new Customer("LOL", 122222, 444));
newcustomer.push_back(new Customer("PPL", 121111, 333));

for (int i = 0; i < 3; i++){
    cout << newcustomer[i]->getName() << endl;
    cout << newcustomer[i]->getPhone() << endl;
    cout << newcustomer[i]->getID() << endl;
    cout << endl;
}






system("pause");
return 0;

}
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个名为customer的类,你可以插入新客户,getName返回名称,getPhone返回电话号码,GetID返回ID,现在我想从该向量中删除所有内容,不知道该怎么做.

Had*_*deS 5

要擦除矢量中的所有元素,您只需使用 myvector.erase (myvector.begin(),myvector.end());myvector.clear().但是这里的问题不仅仅是从向量中删除元素,还要删除在堆上分配的内存.以下是我的解决方案.

int main(){     

vector<Customer*> newcustomer;

newcustomer.push_back(new Customer("III", 123333, 555));
newcustomer.push_back(new Customer("LOL", 122222, 444));
newcustomer.push_back(new Customer("PPL", 121111, 333));

for (int i = 0; i < 3; i++){
    cout << newcustomer[i]->getName() << endl;
    cout << newcustomer[i]->getPhone() << endl;
    cout << newcustomer[i]->getID() << endl;
    cout << endl;
}


while(!newcustomer.empty())
{
    Customer *cust = newcustomer.front();
    newcustomer.erase(newcustomer.begin());
    delete cust;
}

system("pause");
return 0;

}
Run Code Online (Sandbox Code Playgroud)


Fua*_*uad 3

如果您只是想擦除矢量上的所有内容,请使用: http ://www.cplusplus.com/reference/vector/vector/erase/

这是向量的擦除函数

// erase the first 3 elements:
newcustomer.erase (newcustomer.begin(),newcustomer.begin()+3);
Run Code Online (Sandbox Code Playgroud)

  • 这将泄漏为每个对象分配的内存。 (5认同)
  • 如果你*真的*想删除所有内容,我们有`vector::clear()`。 (3认同)