日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

vector容器中erase(删除)的使用

發(fā)布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vector容器中erase(删除)的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

erase函數(shù)可以用于刪除vector容器中的一個或者一段元素,在刪除一個元素的時候,其參數(shù)為指向相應(yīng)元素的迭代器,而在刪除一段元素的時候,參數(shù)為指向一段元素的開頭的迭代器以及指向結(jié)尾元素的下一個元素的迭代器;
在進(jìn)行單個元素刪除后,傳入的迭代器指向不變,仍然指向被刪除元素的位置,而被刪除元素之后的所有元素都向前移動一位,也就是該迭代器實際上是指向了原來被刪除元素的下一個元素。
刪除一段元素后,傳入的迭代器指向也是不變的,仍然指向原來傳進(jìn)去時候的位置,修改的是刪除段后面的元素的位置。

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循環(huán)仍然使用it++,肯定會出錯,要么使用erase的地方使用it++,且去除for循環(huán)里的自增操作

? ? ? ? ??//it=v.erase(it)//(正確)刪除元素后,后面元素自動往前移,不用挪動指針 ??
? ? ? ? }

? ? ? ?else

? ? ? ?{
? ? ? ? ? it++;
? ? ? ?}
?
? ? for (int i = 0; i < v.size(); i++)
? ? {
? ? ? ? cout << v[i] << " ";
? ? }
? ? cout << endl;
? ? system("pause");
? ? return 0;
}

?3、給你一個數(shù)組 nums?和一個值 val,你需要 原地 移除所有數(shù)值等于?val?的元素,并返回移除后數(shù)組的新長度。不要使用額外的數(shù)組空間,你必須僅使用 O(1) 額外空間并 原地 修改輸入數(shù)組。元素的順序可以改變。你不需要考慮數(shù)組中超出新長度后面的元素。

#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;
}

總結(jié)

以上是生活随笔為你收集整理的vector容器中erase(删除)的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。