C++ vector之删除元素

---- 向量容器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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值