Skip to content

删除移除函数

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,下标为01v1.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

Released under the MIT License.