vector容器中erase(删除)的使用
erase函數可以用于刪除vector容器中的一個或者一段元素,在刪除一個元素的時候,其參數為指向相應元素的迭代器,而在刪除一段元素的時候,參數為指向一段元素的開頭的迭代器以及指向結尾元素的下一個元素的迭代器;
在進行單個元素刪除后,傳入的迭代器指向不變,仍然指向被刪除元素的位置,而被刪除元素之后的所有元素都向前移動一位,也就是該迭代器實際上是指向了原來被刪除元素的下一個元素。
刪除一段元素后,傳入的迭代器指向也是不變的,仍然指向原來傳進去時候的位置,修改的是刪除段后面的元素的位置。
1、示例
#include<iostream>
#include<vector>
using namespace std;int main(void)
{vector<int>array;array.push_back(200);array.push_back(30);array.push_back(300);array.push_back(50);array.push_back(60);vector<int>::iterator itor;//刪除單個元素for (itor = array.begin(); itor != array.end(); itor++){if (*itor == 300){itor = array.erase(itor);}}for (itor = array.begin(); itor != array.end(); itor++){cout << *itor << " ";}cout << endl;//刪除一段元素vector<int>::const_iterator iter_begin = array.begin() + 1;vector<int>::const_iterator iter_end = array.end() - 1;array.erase(iter_begin, iter_end);for (itor = array.begin(); itor != array.end(); itor++){cout << *itor << " ";}//刪除最后一個元素vector<int>::iterator iter_last = array.end() - 1;array.erase(iter_last);for (itor = array.begin(); itor != array.end(); itor++){cout << *itor << " ";}return 0;
}
2、注意
#include<iostream>
#include<algorithm>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;int main()
{
? ? vector<int>v;
? ? v.push_back(22);
? ? v.push_back(22);
? ? v.push_back(22);
? ? v.push_back(12);
? ? vector<int>::iterator it = v.begin();
? ? while( it != v.end())
? ? {
? ? ? ? if (*it == 12)
? ? ? ? {
? ? ? ? ? ? v.erase(it);//(錯誤)it被刪除之后,it迭代器里還有東西嗎?肯定沒有吧,你for循環仍然使用it++,肯定會出錯,要么使用erase的地方使用it++,且去除for循環里的自增操作? ? ? ? ??//it=v.erase(it)//(正確)刪除元素后,后面元素自動往前移,不用挪動指針 ??
? ? ? ? }? ? ? ?else
? ? ? ?{
? ? ? ? ? it++;
? ? ? ?}
?
? ? for (int i = 0; i < v.size(); i++)
? ? {
? ? ? ? cout << v[i] << " ";
? ? }
? ? cout << endl;
? ? system("pause");
? ? return 0;
}
?3、給你一個數組 nums?和一個值 val,你需要 原地 移除所有數值等于?val?的元素,并返回移除后數組的新長度。不要使用額外的數組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數組。元素的順序可以改變。你不需要考慮數組中超出新長度后面的元素。
#include<iostream>
#include<algorithm>
#include<vector>
#include<ctime>
#include<stack>
using namespace std;
class Solution {
public:int removeElement(vector<int>& nums, int val) {if (nums.empty()){return 0;}vector<int>::iterator it = nums.begin();while(it!=nums.end()){if (*it == val){it=nums.erase(it);}else{it++;}}return nums.size();}
};int main()
{Solution p;vector<int>v;v.push_back(22);v.push_back(22);v.push_back(22);v.push_back(12);int len = p.removeElement(v, 22);for (int i = 0; i < len; i++){cout << v[i] << endl;}system("pause");return 0;
}
總結
以上是生活随笔為你收集整理的vector容器中erase(删除)的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义类型数组的初始化
- 下一篇: 图像与数据类型的对应,以及如何显示