vector删除元素之pop

    xiaoxiao2021-12-10  19

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

    转载请注明原文地址: https://ju.6miu.com/read-700430.html

    最新回复(0)