删除移除函数
erase
删除函数
TIP
注意:erase
函数用于删除容器中的元素,返回值为删除后容器的迭代器。真的删除了元素
erase()
:删除指定位置和范围内的元素。
1. erase()
删除指定位置的元素
cpp
vector<int> v1 = {4,6,7,1,2,5,3};
auto it = v1.erase(v1.begin()+2); // 删除第3个元素
cout <<"被删除后的第一个元素是:"<< *it <<"他的下标是:"<< distance(v1.begin(), it) << endl; // 输出1,指向被删除元素后面的元素
for(auto i = v1.begin(); i != v1.end(); ++i){
cout << *i << " "; // 输出4 6 1 2 5 3
}
2. erase()
删除指定范围的元素
WARNING
注意:erase
函数删除到末尾元素时,返回值为v1.end()
,也就是指向最后一个元素的下一个位置,所以一般是不能用distance
函数来计算下标的。 所以在下面的代码中,被删除后的第一个元素是7
,他的下标是2
。因为此时元素长度为2
,下标为0
和1
。v1.end()
指向的是v1
末尾的下一个位置即是原来位置3下标2的7。
cpp
vector<int> v1 = {4,6,7,1,2,5,3};
auto it = v1.erase(v1.begin()+2,v1.end()); // 删除第3个元素到最后一个元素
cout <<"被删除后的第一个元素是:"<< *it <<"他的下标是:"<< distance(v1.begin(), it) << endl; //被删除后的第一个元素是:7他的下标是:2
for(auto i = v1.begin(); i != v1.end(); ++i){
cout << *i << " "; // 输出4 6
}
remove
移除函数
TIP
注意:remove
函数用于移除容器中的元素,返回值为移除后容器的迭代器。没有真的删除元素
remove()
:移除指定值的元素。remove_if()
:移除满足条件的元素。
注意:remove
函数并不会改变容器的大小,使用后需要结合erase
函数来真正删除元素。
1. remove()
移除指定值的元素
WARNING
注意:查看下面代码的输出,remove
函数并没有真的删除元素,只是将需要的元素移动到前面并且直接覆盖掉了前面的元素,超过删除之后容器长度的元素保持不变。
所以下面代码中v1
的长度还是7
,最后一个元素3
没有被删除。
cpp
vector<int> v1 = {4,6,7,1,2,5,3};
auto it = remove(v1.begin(), v1.end(), 5);
for(auto i = v1.begin(); i != it; ++i){
cout << *i << " "; // 输出4 6 7 1 2 3
}
cout << endl;
for(auto i = v1.begin(); i != v1.end(); ++i){
cout << *i << " "; // 输出4 6 7 1 2 3 3
}
cout << endl;
cout << v1.size() << endl; // 输出7
2. 使用erase
函数删除移除元素
cpp
vector<int> v1 = {4,6,7,1,2,5,3};
auto it = remove(v1.begin(), v1.end(), 5);
v1.erase(it,v1.end()); // 删除多余的元素
for(auto i = v1.begin(); i != v1.end(); ++i){
cout << *i << " "; // 输出4 6 7 1 2 3
}
cout << endl;
cout << v1.size() << endl; // 输出6
3. remove_if()
移除满足条件的元素
WARNING
注意:remove_if
函数也并不会真的删除元素,只是将需要的元素移动到前面并且直接覆盖掉了前面的元素,超过删除之后容器长度的元素保持不变。
cpp
vector<int> v1 = {4,6,7,1,2,5,3};
auto it = remove_if(v1.begin(), v1.end(), [](int i){ return i%2 == 0; }); // 删除偶数
for(auto i = v1.begin(); i != v1.end(); ++i){
cout << *i << " "; // 输出7 1 5 3 2 5 3
}
cout << endl;
v1.erase(it,v1.end()); // 删除多余的元素
for(auto i = v1.begin(); i != v1.end(); ++i){
cout << *i << " "; // 输出7 1 5 3
}
cout << endl;
cout << v1.size() << endl; // 输出4