vector容器
1.遍歷
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int>a;
a.push_back(1);
a.push_back(2);
a.push_back(6);
a.push_back(8);
a.pop_back();
方法一:
for(auto i:a){
cout<<i<<'\t';
}
cout<<endl;
方法二:迭代器
cout<<"-------------------------"<<endl;
for(auto i=a.begin();i!=a.end();i++){//注意不能用i+=1要用++i或i++,還有因為是迭代器所以不能用><要用!=
cout<<*i<<'\t';
}
cout<<endl;
cout<<"-------------------------"<<endl;
vector<int>b={1,8,2};
方法三:
for(int i=0;i<b.size();i++){
cout<<b[i]<<'\t';
}
return 0;
}
2.排序去重
//排序去重
vector<int>a={1,2,2,3,4,9,9,1,4,2};
sort(a.begin(),a.end());//排序,從小到大預設-->1,1,2,2,2,3,4,4,9,9
auto t= unique(a.begin(),a.end());//unique函式作業將相同重複部分仍在最後面-->1,2,3,4,9,1,2,2,4,9-->並且返回第一個重複元素換後位置迭代器 a.erase(t,a.end());//刪除重複元素 for(auto i:a){ cout<<i<<'\t'; }//1,2,3,4,9 cout<<endl; cout<<a.size();//5
3.增刪元素+判空
#include<bits/stdc++.h> using namespace std; int main(){ vector<int>a; a.push_back(1); a.push_back(2); a.push_back(6); a.push_back(8); a.pop_back();//1,2,6 //1.定點插入,其餘順延 a.insert(a.begin()+1,9);//在第一個位置插入9 for(auto i:a){ cout<<i<<'\t'; }//1,9,2,6 //2.定點刪除 a.erase(a.begin()+2); cout<<endl; cout<<"after delete"<<endl; for(auto i:a){ cout<<i<<'\t'; }//1,9,6 cout<<endl; if(a.empty()){//判空 cout<<"before clear isempty"<<endl; } a.clear(); if(a.empty()){ cout<<"after clear isempty"<<endl; } return 0; }
4.應用
問題:取原陣列偶數部分並且保持相對位置不變
//任務:刪除陣列中奇數元素並且不改變原來相對位置 #include<bits/stdc++.h> using namespace std; int main(){ vector<int>a={1,2,2,8,9,7,6,5,3,4,9,10,11} ; //為了高效採用原地建表不再開個陣列 /*方法1.整體建表 int k=0;//記錄偶數個數 for(int i=0;i<a.size();i++){ if(a[i]%2==0){//保留偶數元素! a[k++]=a[i];//覆蓋 } } for(int i=0;i<k;i++){ cout<<a[i]<<'\t'; }*/ /*方法2:移動法 利用k統計當前元素前面有幾個奇數 int k=0; for(int i=0;i<a.size();i++){ if(a[i]%2==0){ a[i-k]=a[i]; } else{ k++;//奇數個數 } } for(int i=0;i<a.size()-k;i++){//a.size()-k-->偶數個數 cout<<a[i]<<'\t'; }*/ //方法3: 分割槽間:偶數區間下標範圍[0,k],奇數區間下標範圍[k+1,a.size()-1] int k=-1; for(int i=0;i<a.size();i++){ if(a[i]%2==0){ k++;//應該放的位置 swap(a[i],a[k]); } } a.resize(k+1);//擷取陣列要的部分-->前k+1個元素-->偶數 for(auto i:a){ cout<<i<<'\t'; } return 0; }