---- 向量容器vector的成员函数pop_back()可以删除最后一个元素.

---- 而函数erase()可以删除由一个iterator指出的元素,也可以删除一个指定范围的元素。

---- 还可以采用通用算法remove()来删除vector容器中的元素.

---- 不同的是:采用remove一般情况下不会改变容器的大小,而pop_back()与erase()等成员函数会改变容器的大小。

1、pop_back()

void pop_back();
Delete last element
Removes the last element in the vector, effectively reducing the container size by one.

This destroys the removed element.

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec;
    int sum(0);
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(30);
    while(!vec.empty())
    {
        sum += vec.back();
        vec.pop_back();
    }
    cout<<"vec.size()="<<vec.size()<<endl;
    cout<<"sum = "<<sum<<endl;
    system("pause");
    return 0;
}


0
60

2、erase()

C++98

iterator erase (iterator position);
iterator erase (iterator first, iterator last);
C++11
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
删除指定位置的一个元素或删除指定范围内的元素

Removes from the vector either a single element (position) or a range of elements ([first,last)). 包括first,不包括last。


This effectively reduces the container size by the number of elements removed, which are destroyed.

会减小容器的容量。迭代器用于erase删除元素后,其后会失效,即不能再用该迭代器操作向量。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec;
    for(int i=0;i<10;i++)
    {
        vec.push_back(i);
    }
    vec.erase(vec.begin()+5);//erase the 6th element
    vec.erase(vec.begin(),vec.begin()+3);
    for(int i=0;i<vec.size();i++)
    {
        cout<<vec[i]<<' ';
    }
    cout<<endl;
    system("pause");
    return 0;
}


//输出3 4 6 7 8 9

3、remove()  不建议使用

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> vec;
    vec.push_back(100);
    vec.push_back(300);
    vec.push_back(300);
    vec.push_back(300);
    vec.push_back(300);
    vec.push_back(500);
    cout<<&vec<<endl;
    vector<int>::iterator itor;
    for(itor=vec.begin();itor!=vec.end();itor++)
    {
        if(*itor==300)
        {
            itor=vec.erase(itor);
        }
    }
    for(itor=vec.begin();itor!=vec.end();itor++)
    {
        cout<<*itor<<" ";
    }    
    system("pause");
    return 0;
}

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐