vector

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

 

posted @ 2024-08-28 22:07  Annaprincess  阅读(23)  评论(0)    收藏  举报