溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vector,deque,list相關(guān)操作

發(fā)布時(shí)間:2020-04-03 09:52:19 來源:網(wǎng)絡(luò) 閱讀:558 作者:匯天下豪杰 欄目:移動(dòng)開發(fā)

1、vector的基本操作

(1)、對(duì)動(dòng)態(tài)數(shù)組元素的添加和刪除、獲取

代碼如下:

#include<iostream>
#include<vector>
using namespace std;

//數(shù)組元素的添加和刪除、獲取
int main(void){
    vector<int> v1; 

    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);

    cout<<"len:"<<v1.size()<<endl;
    cout<<"獲取頭部元素:"<<v1.front()<<endl;

    //修改頭部、尾部元素的值
    //函數(shù)返回值當(dāng)左值,應(yīng)該返回一個(gè)引用;
    v1.front() = 11; 
    v1.back() = 55; 

    while(v1.size() > 0){ 
        cout<<v1.back()<<" ";    //獲取尾部元素;
        v1.pop_back(); //刪除尾部元素
     }   
    cout<<endl;

}

(2)、vector的初始化

代碼如下:

#include<iostream>
#include<vector>
using namespace std;

void printV(vector<int> &v){
    for(int i = 0; i < v.size(); i++){
        cout<<v[i]<<" ";
    }
    cout<<endl;
}

int main(void){
    //vector類
    vector<int> v1;

    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);

    vector<int> v2 = v1; //對(duì)象初始化
    vector<int> v3(v1.begin(), v1.begin()+2); //對(duì)象初始化
/*
    //vector的遍歷
    for(i =a 0; i < v1.size(); i++){
        v1[i] = i + 1;
    }
    int i;
    for(i = 0; i < v1.size(); i++){
        cout<<v1[i]<<" ";
    }
    cout<<endl;
*/
    printV(v1);

    //push_back()的強(qiáng)化記憶;
    vector<int> v5(10); //前10個(gè)元素初始化為0;
    v5.push_back(100);
    v5.push_back(200);
    printV(v5);
    return 0;    
}

(3)、vector中迭代器的正向和反向遍歷

代碼如下:

#include<iostream>
#include<vector>
using namespace std;

int main(void){
    vector<int> v1(10); //初始化空間的值都為0;
    for(int i = 0; i < 10; i++){
        v1[i] = i+1;
    }   
//迭代器
//1(begin)、3、5 、(end) 當(dāng)it = v1.end()的時(shí)候,說明這個(gè)容器已經(jīng)遍歷完了;
//end()的位置,應(yīng)該是5的后面;
    //正向遍歷
    vector<int>::iterator it; 
    for(it = v1.begin(); it != v1.end(); it++){
        cout<<*it<<" ";
    }   
    cout<<endl;

    //反向遍歷
    vector<int>::reverse_iterator rit;
    for(rit = v1.rbegin(); rit != v1.rend(); rit++){
        cout<<*rit<<" ";
    }   
    cout<<endl;

    return 0;
}

(4)、vector中的元素刪除操作

代碼如下:

#include<iostream>
#include<vector>
using namespace std;

void printV(vector<int> &v){
    for(int i = 0; i < v.size(); i++){
        cout<<v[i]<<" ";
    }   
    cout<<endl;
}

//刪除
int main(void){
    vector<int> v1(10);

    for(int i = 0; i < 10; i++){
        v1[i] = i + 1;
    }   
    //區(qū)間刪除
    v1.erase(v1.begin(), v1.begin()+3); //刪除開始的3個(gè)元素
    //指定(元素)位置刪除
    v1.erase(v1.begin()); //在頭部刪除一個(gè)

    //根據(jù)元素的值
    v1[1] = 2;
    v1[3] = 2;

    vector<int>::iterator it;
    for(it = v1.begin(); it != v1.end(); it++){
        if(*it == 2){
            v1.erase(it); //刪除的是元素,參數(shù)是迭代器
        }
    }

    v1.insert(v1.begin(), 100);
    v1.insert(v1.end(), 200);
    printV(v1);
    return 0;
}


2、deque的基本操作

雙端數(shù)組的基本操作;

代碼如下:

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;

void printD(deque<int> &d){
    deque<int>::iterator it; 
    for(it = d.begin(); it != d.end(); it++){
        cout<<*it<<" ";
    }   
    cout<<endl;
}

int main(void){
    deque<int> d1; 
    d1.push_back(1);
    d1.push_back(3);
    d1.push_back(5);

    d1.push_front(-11);
    d1.push_front(-33);
    d1.push_front(-55);

    cout<<"頭部元素:"<<d1.front()<<endl;
    cout<<"尾部元素:"<<d1.back()<<endl;
    printD(d1);
    d1.pop_front();
    d1.pop_back();
    printD(d1);

    //查找-33在數(shù)組中的下標(biāo)
    deque<int>::iterator it;
    it = find(d1.begin(), d1.end(), -33);
    if(it != d1.end()){
        cout<<"-33數(shù)組的下標(biāo)是:"<<distance(d1.begin(), it)<<endl; //查找下標(biāo);
    }else{
        cout<<"沒有找到值為-33"<<endl;
    }

    return 0;
}


3、stack的基本操作

代碼如下:

#include<iostream>
#include<stack>
using namespace std;

class Teacher{
    public:
        void printS(){
            cout<<"age :"<<age<<endl;
        }
    public:
        int age;
        char name[15];
};

int main(void){
    Teacher t1,t2,t3;

    t1.age = 31;
    t2.age = 32;
    t3.age = 33;

    stack<Teacher *> s;
    s.push(&t1);
    s.push(&t2);
    s.push(&t3);

    while(!s.empty()){
        Teacher *tmp = s.top();
        tmp->printS();
        s.pop();
    }

    return 0;
}

/*
int main(void){
    Teacher t1,t2,t3;

    t1.age = 31;
    t2.age = 32;
    t3.age = 33;

    stack<Teacher> s;
    s.push(t1);
    s.push(t2);
    s.push(t3);

    while(!s.empty()){
        Teacher tmp = s.top();
        tmp.printS();
        s.pop();    
    }

    return 0;
}
*/
/*
int main(void){
    stack<int> s;

    //入棧
    for(int i = 0; i < 10; i++){
        s.push(i+1);
    }

    cout<<s.size()<<endl; //棧的大小
    //出棧
    while(!s.empty()){
        int tmp = s.top(); //獲取棧頂元素
        cout<<tmp<<" ";
        s.pop();
    }
    cout<<endl;

    return 0;
}
*/


4、queue的基本操作

代碼如下:

#include<iostream>
#include<queue>
using namespace std;

class Teacher{
    public:
        int age;
        char name[25];
    public:
        void printQ(){
            cout<<"age :"<<age<<endl;
        }
};

int main(void){
    Teacher q1, q2, q3;

    q1.age = 31;
    q2.age = 32;
    q3.age = 33;

    queue<Teacher *> q;
    q.push(&q1);
    q.push(&q2);
    q.push(&q3);

    while(!q.empty()){
        Teacher *tmp;
        tmp = q.front(); //獲取隊(duì)列頭的元素
        tmp->printQ();
        q.pop();
    }

    return 0;
}


/*
//隊(duì)列中的基礎(chǔ)數(shù)據(jù)類型,
int main(void){
    queue<int> q;

    q.push(1);
    q.push(2);
    q.push(3);


    cout<<"對(duì)頭元素:"<<q.front()<<endl;
    cout<<"隊(duì)列的大小"<<q.size()<<endl;

    while(!q.empty()){
        cout<<q.front()<<" ";    
        q.pop();
    }
    cout<<endl;
    return 0;
}
*/


5、priority_queue的基本操作

代碼如下:

#include<iostream>
#include<queue>
using namespace std;

int main(void){
    priority_queue<int> p1; //默認(rèn)的情況下:是最大優(yōu)先級(jí)隊(duì)列;
    priority_queue<int, vector<int>, less<int> > p2; 
    priority_queue<int, vector<int>, greater<int> > p3; //是最小的優(yōu)先級(jí)隊(duì)列

    p1.push(33);
    p1.push(11);
    p1.push(22);
    p1.push(77);
    p1.push(55);
    p1.push(99);

    cout<<"隊(duì)頭元素:"<<p1.top()<<endl;
    cout<<"隊(duì)列的大小:"<<p1.size()<<endl;

    while(!p1.empty()){
        cout<<p1.top()<<" "; //獲取隊(duì)頭的是top();
        p1.pop();
    }   
    cout<<endl;

    cout<<"--------------------測試最小值優(yōu)先級(jí)隊(duì)列---------------------"<<endl;
    p3.push(33);
    p3.push(11);
    p3.push(22);
    p3.push(77);
    p3.push(55);
    p3.push(99);

    cout<<"隊(duì)頭元素:"<<p3.top()<<endl;
    cout<<"隊(duì)列的大小:"<<p3.size()<<endl;

    while(!p3.empty()){
        cout<<p3.top()<<" "; //獲取隊(duì)頭的是top();
        p3.pop();
    }
    cout<<endl;

    return 0;
}


6、list的基本操作

(1)、list的遍歷

代碼如下:

#include<iostream>
#include<list>
using namespace std;

void printL(list<int> &l){
    list<int>::iterator it; 
    for(it = l.begin(); it != l.end(); it++){
        cout<<*it<<" ";
    }   
    cout<<endl;    
}

//迭代器中的begin()和end()代表的含義:begin代表的是第一個(gè)元素的位置,end代表的是最后一個(gè)元素的下一個(gè)元>
素的位置;
int main(void){
    list<int> l;

    cout<<"list的大小:"<<l.size()<<endl;
    for(int i = 0; i < 10; i++){
        l.push_back(i);
    }   

    printL(l);
    //list不能隨即訪問;
    list<int>::iterator it = l.begin();
    it++;
    it++;
    it++;
    l.insert(it, 100); //STL中的插入默認(rèn)是前插;
    printL(l);


//1、list鏈表的節(jié)點(diǎn)的index是從0位置開始的
//2、insert方法都是默認(rèn)的前插
    return 0;
}

(2)、list的刪除

代碼如下:

#include<iostream>
#include<list>
using namespace std;


void printL(list<int> &l){
    list<int>::iterator it;
    for(it = l.begin(); it != l.end(); it++){
        cout<<*it<<" ";
    }
    cout<<endl;
}
//list刪除
int main(void){
    list<int> l;

    for(int i = 0; i < 10; i++){
        l.push_back(i);
    }   

    list<int>::iterator it1 = l.begin();
    list<int>::iterator it2 = l.begin();
    it2++;
    it2++;
    it2++;

    l.erase(it1, it2); //刪除是左閉右開的操作;[0, 3)
    printL(l);

    l.erase(l.begin());
    printL(l);

    l.insert(l.begin(), 100);
    l.insert(l.begin(), 100);
    l.insert(l.begin(), 100);
    l.insert(l.begin(), 100);
    l.insert(l.begin(), 100);
    printL(l);

    l.remove(100); //刪除元素的方法,刪除了所有值為100的元素;
    printL(l);

    return 0;
}


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI