STL迭代器学习

简介:     STL里面迭代器就像指针一样,有了迭代器我们可以更加方便的进行访问集合里面的元素     下面分别对各个容器进行分析    1 list #include#include#include#include#incl...


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



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




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




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





目录
相关文章
|
3月前
|
算法 编译器 C++
|
5月前
|
算法 C++ 容器
STL迭代器
STL迭代器
26 0
|
21天前
|
存储 C++ 容器
C++之STL顺序容器
C++之STL顺序容器
|
23天前
|
算法 程序员 C语言
【C++ 迭代器实现细节 】深入探索C++迭代器:从实现到整合
【C++ 迭代器实现细节 】深入探索C++迭代器:从实现到整合
76 0
|
4月前
|
C++
【STL】:反向迭代器
【STL】:反向迭代器
26 0
|
10月前
|
C++ 容器
C++【STL】之反向迭代器
C++ STL 反向迭代器设计思想和模拟实现详细讲解,干货满满!
88 0
C++【STL】之反向迭代器
|
12月前
|
算法 安全 关系型数据库
深入探究C++中的仿函数和迭代器——提升你的STL技能
作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段&gt;——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的 作者主页:热爱编程的小K 专栏链接:c++ 欢迎各位→点赞 + 收藏 + 留言​ 总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 ———————————————— 版权声明:本文为CSDN博主「热爱编程的小K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_72157449
|
12月前
|
C++ 容器
C++ STL学习之【反向迭代器】
适配器模式是 STL 中的重要组成部分,在上一篇文章中我们学习了 容器适配器 的相关知识,即 stack 与 queue,除了 容器适配器 外,还有 迭代器适配器,借助 迭代器适配器,可以轻松将各种容器中的普通迭代器转变为反向迭代器,这正是适配器的核心思想
150 0
|
C++ 容器
C++ STL底层实现
介绍STL底层实现原理