STL迭代器学习


    STL里面迭代器就像指针一样,有了迭代器我们可以更加方便的进行访问集合里面的元素

    下面分别对各个容器进行分析

  

1 list

#include<list>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int main(){
    list<int>ls;
    list<int>::iterator it;
    // push_back
    for(int i = 0 ; i < 10 ; i++)
        ls.push_back(i);
    // 遍历
    puts("遍历");
    for(it = ls.begin() ; it != ls.end() ; it++)
        printf("%d " , *it);
    printf("\n\n");

    // 插入
    puts("插入");
    it = ls.begin();
    /* 先创建一个新的节点,然后把前一个指向新的节点
    新的节点指向当前节点*/
    ls.insert(it , -1);
    for(it = ls.begin() ; it != ls.end() ; it++)
        printf("%d " , *it);
    printf("\n\n");
    
    // 删除  
    puts("删除");
    it = find(ls.begin() , ls.end() , 5);
    ls.erase(it);
    /*把前一个元素指向当前的下一个元素,那么当前这个元素就被删除*/
    for(it = ls.begin() ; it != ls.end() ; it++)
        printf("%d " , *it);
    printf("\n\n");
    
    /* list的迭代器是循环的。begin往前就是end
    end往后就是begin,但是注意的是end表示的是最后一个元素的下一个位置*/ 
    it = ls.begin();
    printf("%d\n" , *it);
    it--;// it 变成了end
    it--;// it 指向了最后一个元素
    printf("%d\n" , *it);
    puts("--------------"); 
    it = ls.end();
    it--;// it 指向了最后一个元素
    printf("%d\n" , *it);
    it++;// it 指向了end
    it++;// it 指向了begin
    printf("%d\n" , *it);

    return 0;
}

STL迭代器学习


2 vector

#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int main(){
    vector<int>v;
    vector<int>::iterator it;
    // push_back
    for(int i = 0 ; i < 10 ; i++)
        v.push_back(i);
    // 遍历
    puts("遍历");
    for(it = v.begin() ; it != v.end() ; it++)
        printf("%d " , *it);
    printf("\n\n");

    // 插入
    puts("插入");
    it = find(v.begin() , v.end() , 5);
    /* 当前这个位置之后的所有元素都往后移动,然后在
    当前位置插入*/
    v.insert(it , -1);
    for(it = v.begin() ; it != v.end() ; it++)
        printf("%d " , *it);
    printf("\n\n");

    // 删除
    puts("删除");
    it = find(v.begin() , v.end() , 5);
    /* 当前这个位置之后的所有元素都往前移动,然后删了
    当前元素*/
    v.erase(it);
    for(it = v.begin() ; it != v.end() ; it++)
        printf("%d " , *it);
    printf("\n\n");

    // vector的迭代器提供指向任何位置的功能
    it = v.begin();
    printf("%d\n" , *it);
    it = it+3; // it指向了当前位置的后面3个的地方
    printf("%d\n" , *it);

    it = v.end();
    it = it-3; // it指向了当前位置的前面3个的地方
    printf("%d\n" , *it);
    return 0;
}


STL迭代器学习


3 map

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int main(){
    // map是会自动按照key值来排序
    map<int , int>mp;
    map<int , int>::iterator it;
    // push_back
    for(int i = 1 ; i <= 10 ; i++)
        mp[i] = i;
    mp.insert(make_pair(-1 , 11)); 
    // 遍历
    puts("遍历");
    for(it = mp.begin() ; it != mp.end() ; it++)
        printf("%d->%d " , it->first , it->second);
    printf("\n\n");
    
    // 删除
    puts("删除");
    /* 找到key值为5的迭代器,然后删除,如果没有找到是
    指向end*/
    it = mp.find(5);
    mp.erase(it);
    for(it = mp.begin() ; it != mp.end() ; it++)
        printf("%d->%d " , it->first , it->second);
    printf("\n\n");
     
    return 0;
}


STL迭代器学习

4 set

#include<set>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int main(){
    // set会自动的根据值进行排序
    set<int> s;
    set<int>::iterator it;
    
    // push_back
    for(int i = 1 ; i <= 10 ; i++)
        s.insert(i);
    // 遍历
    puts("遍历");
    for(it = s.begin() ; it != s.end() ; it++)
        printf("%d " , *it);
    printf("\n\n");

    // 因为set是自动的排序,所以和插入到哪个位置没有关系
    // 删除
    puts("删除");
    it = s.find(5);
    // 如果没有找到就是end
    s.erase(it);
    for(it = s.begin() ; it != s.end() ; it++)
        printf("%d " , *it);
    printf("\n\n");
    return 0;
}

STL迭代器学习



上一篇:spring cloud 学习(6) - zuul 微服务网关


下一篇:windows部署服务笔记