std::vector 中remove()只是将待删除元素之后的元素移动到vector的前端,而不是真正删除。若要真正移除,需要搭配使用erase()。
#include
#include
using namespace std;
int main()
{
const int VECTOR_SIZE = 8;
// Define a template class vector of integers
vector<int > Numbers(VECTOR_SIZE);
//Initialize vector Numbers
Numbers[0] = 10;
Numbers[1] = 20;
Numbers[2] = 10;
Numbers[3] = 15;
Numbers[4] = 12;
Numbers[5] = 7;
Numbers[6] = 9;
Numbers[7] = 10;
cout << "The Numbers:" << endl;
for (auto itor : Numbers)
{
cout << itor << " " ;
}
cout << endl;
cout << "After remove() The Numbers:" << endl;
auto itorLast = remove(Numbers.begin(), Numbers.end(), 10);
for (auto itor : Numbers)
{
cout << itor << " ";
}
cout << endl;
cout << "After remove() The removed Number count:" << Numbers.end() - itorLast << endl;
cout << "After remove() The wanted Numbers:" << endl;
for (auto itor = Numbers.begin(); itor != itorLast; itor++)
{
cout << *itor << " ";
}
return 0;
}

#include
using namespace std;
#include
int main()
{
const int VECTOR_SIZE = 8;
// Define a template class vector of integers
vector<int > Numbers(VECTOR_SIZE);
//Initialize vector Numbers
Numbers[0] = 10;
Numbers[1] = 20;
Numbers[2] = 10;
Numbers[3] = 15;
Numbers[4] = 12;
Numbers[5] = 7;
Numbers[6] = 9;
Numbers[7] = 10;
cout << "The Numbers:" << endl;
for (auto itor : Numbers)
{
cout << itor << " " ;
}
cout << endl;
Numbers.erase(remove(Numbers.begin(), Numbers.end(), 10), Numbers.end());
for (auto itor : Numbers)
{
cout << itor << " ";
}
return 0;
}

错误用法:earase()结束后,iter变成了野指针,iter++就产生了错误。
for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); iter++)
{
if( *iter == 3)
{
veci.erase(iter);
}
}
另一种错误:无法删除连续两个3.
for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); iter++)
{
if( *iter == 3)
iter = veci.erase(iter);
}
正确用法:
for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); )
{
if( *iter == 3)
iter = veci.erase(iter);
else
iter ++ ;
}
// 先排序
sort(Numbers.begin(), Numbers.end());
// 去除重复
Numbers.erase(unique(Numbers.begin(), Numbers.end()), Numbers.end());