目录

  • 1.定义
  • 2. Vector 向量容器
    • 2.1.构造函数
    • 2.2.支持的运算符
    • 2.3. vector 函数接口的使用
    • 2.4.vector 迭代的定义
      • 补充: stl 库中的迭代器
  • 3.双向队列
  • 4.Lists(链表)
  • 5.Set 二叉树
  • 6. map 容器的使用 (重点)

1.定义

C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等.

2. Vector 向量容器

Vectors 包含着一系列连续存储的元素,其行为和数组类似。

2.1.构造函数

vector();
vector( size_type num, const TYPE &val ); //把 num 个 val 的值放到该容器中
vector( const vector &from );//拷贝构造函数
vector( input_iterator start, input_iterator end );//利用迭代器进行区间赋值

2.2.支持的运算符

2.3. vector 函数接口的使用

push_back 函数
语法: void push_back( const TYPE &val );push_back()添加值为val的元素到当前vector末尾size 函数
语法: size_type size();size() 函数返回当前vector所容纳元素的数目 void pop_back();
pop_back()函数删除当前vector最末的一个元素

2.4.vector 迭代的定义

每个stl 模板接口都有一个专用的迭代器。

vector<int>::iterator it;

补充: stl 库中的迭代器

迭代器就是 stl 库中的 一个特殊指针,功能与指针类似
官方的迭代器使用 demo:

begin 函数
语法: iterator begin();begin()函数返回一个指向当前vector起始元素的迭代器.例如,下面这段使用了一个迭代器来显示出vector中的所有元素:vector<int> v1( 5, 789 );
vector<int>::iterator it;
for( it = v1.begin(); it != v1.end(); it++ )cout << *it << endl;相关内容: end(). end 函数
语法: iterator end();
end() 函数返回一个指向当前vector末尾元素的下一位置的迭代器.注意,如果你要访问末尾元素,需要先将此迭代器自减1.相关内容: begin()
  • vector 删除接口的使用

    iterator erase( iterator loc );  //删除迭代器所指向的值 //返回值:一个新的迭代器 iterator erase( iterator start, iterator end );//删除 start 迭代器  -》 end 迭代器区间的值 
  • vector 容器的插入接口的使用
    iterator insert( iterator loc, const TYPE &val ); //在 loc 位置插入 val
    void insert( iterator loc, size_type num, const TYPE &val );//在 loc 位置 插入 num个val
    void insert( iterator loc, input_iterator start, input_iterator end); //loc 位置上插入 区间 start -> end
    

3.双向队列

双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。
特点可以操作头部数据:

pop_front
语法: void pop_front();
pop_front()删除双向队列头部的元素push_front
语法: void push_front( const TYPE &val );
push_front()函数在双向队列的头部加入一个值为val的元素。

4.Lists(链表)

Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.

  • 构造函数

    list<int> first;                                // 定义一个空链表
    list<int> second (4,100);                       // 往链表中插入4个100
    list<int> third (second.begin(),second.end());  // 把一个区间的值赋值给链表
    list<int> fourth (third);                       // 拷贝构造函数
    
  • 接口说明
    merge
    语法: void merge( list &lst );void merge( list &lst, Comp compfunction );merge()函数把自己和lst链表连接在一起,产生一个整齐排列的组合链表。如果指定compfunction,则将指定函数作为比较的依据排序(sort)
    语法: void sort();void sort( Comp compfunction );sort()函数为链表排序,默认是升序。如果指定compfunction的话,就采用指定函数来判定两个元素的大小。remove
    语法: void remove( const TYPE &val );remove()函数删除链表中所有值为val的元素。例如 reverse
    语法: void reverse();reverse()函数把list所有元素倒转unique
    语法: void unique();  //删除重复的元素
    

    使用例子:

    // list::merge
    #include <iostream>
    #include <list>
    using namespace std;// this compares equal two doubles if
    //  their interger equivalents are equal
    bool mycomparison (double first, double second)
    { return ( int(first)<int(second) ); }int main ()
    {//定义两条链表list<double> first, second;//往第一条插入数据first.push_back (3.1);first.push_back (2.2);first.push_back (2.9);//往第二条插入数据second.push_back (3.7);second.push_back (7.1);second.push_back (1.4);//进行链表排序 first.sort();second.sort();//合并两条链表first.merge(second);second.push_back (2.1);//再次合并  并指定合并的排序方式 first.merge(second,mycomparison);cout << "first contains:";for (list<double>::iterator it=first.begin(); it!=first.end(); ++it)cout << " " << *it;cout << endl;return 0;
    }
    

5.Set 二叉树

集合(Set)是一种包含已排序对象的关联容器 (相等于二叉树)

  • 构造函数

    // constructing sets
    #include <iostream>
    #include <set>
    using namespace std;
    struct classcomp {bool operator() (const int& lhs, const int& rhs) const{return lhs<rhs;}
    };int main ()
    {set<int> first;                           //定义空的set容器int myints[]= {10,20,30,40,50};set<int> second (myints,myints+5);        //往set容器中插入5个数据 set<int> third (second);                  //拷贝构造函数 set<int> fourth (second.begin(), second.end());  //迭代器的方式赋值set<int,classcomp> fifth;                 // 指定插入的比较方法return 0;
    }
    
  • 插入数据
    iterator insert( iterator i, const TYPE &val );void insert( input_iterator start, input_iterator end );pair insert( const TYPE &val );
    • set 插入自定义的数据类型

      1. 重载 比较运算符 ,提示重载参数:需要添加const

        #include <iostream>
        using namespace std;
        #include <set> //练习:利用 set 容器,插入自定义的 person 数据 ,姓名,年龄,根据年龄插入。
        class  person
        {public: person(string n,int a):name(n),age(a){}
        string  name;
        int age;friend bool operator<(person &a,person &b);
        };//重载比较运算符
        bool operator<(const person &a,const person &b)
        {return  a.age <  b.age;
        }
        int main()
        {//定义一个 set 容器 set<person>  s;person a("小明",10);person a1("小花",19);person a2("小东",7);//插入数据 s.insert(a);s.insert(a1);s.insert(a2);for(auto it=s.begin();it!=s.end();it++){cout  << it->name << endl;cout  << it->age << endl;}}
        
      2. 在定义set 容器的时候说明比较方法
        //重新定义比较的方法
        struct classcomp {bool operator() (const person& lhs, const person& rhs) const{return lhs.age>rhs.age;}
        };int main()
        {//定义一个 set 容器 set<person,classcomp>  s;person a("小明",10);person a1("小花",19);person a2("小东",7);//插入数据 s.insert(a);s.insert(a1);s.insert(a2);for(auto it=s.begin();it!=s.end();it++){cout  << it->name << endl;cout  << it->age << endl;}
        }
        

6. map 容器的使用 (重点)

C++ map 是一种关联式容器,包含 键值对 key/value ,即每一个 key 对应一个 value
在map 容器中,所有的数据都是成对存在的。 -> pair 对组

  • pair 对组的使用

  • map 容器的构造函数

    // constructing maps
    #include <iostream>
    #include <map>
    using namespace std;struct classcomp {bool operator() (const char& lhs, const char& rhs) const{return lhs<rhs;}
    };int main ()
    {map<char,int> first; //定义一个空的 map 容器 //往map容器中插入数据first['a']=10;first['b']=30;first['c']=50;first['d']=70;map<char,int> second (first.begin(),first.end()); //赋值一个区间 map<char,int> third (second);//拷贝构造函数map<char,int,classcomp> fourth;        //设置map 容器的排序方法 return 0;
    }
    
  • map插入数据的方法

     //在pos 的位置插入 pair
    iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE> &val );
    //插入 start -》 end 的区间值 void insert( input_iterator start, input_iterator end );//直接插入  pair pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val );
    
  • 重载下标后的插入方法

    // accessing mapped values
    #include <iostream>
    #include <map>
    #include <string>
    using namespace std;int main ()
    {map<char,string> mymap;map<char,string>::iterator it;//重载后的下标插入方法  mymap['a']="an element";mymap['b']="another element";mymap['c']=mymap['b'];//重载后的下标 取出value的方法cout << "mymap['a'] is " << mymap['a'] << endl;cout << "mymap['b'] is " << mymap['b'] << endl;cout << "mymap['c'] is " << mymap['c'] << endl;cout << "mymap['d'] is " << mymap['d'] << endl;cout << "mymap now contains " << (int) mymap.size() << " elements." << endl;return 0;
    }//语法说明:
    对象名[key] = value;    //赋值  变量 = 对象名[key]     //取值
    
  • map 的查找方法 (使用最多)

    find
    语法: iterator find( const KEY_TYPE &key );find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。//通过 key 找到 value
    

13.标准模板库(STL)相关推荐

  1. 13 标准模板库STL【C++】

    13 标准模板库STL 13- 判断题 单选题 填空题 程序填空题 函数题 7-1 .查找电话号码 7-2 姓名排序 7-3 Score Processing 13+ 编程题 7-1 查找成绩并折算后 ...

  2. C++ 标准模板库(STL)

    C++ 标准模板库(STL) C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列) ...

  3. c++标准模板库STL【快速查找】【最全】【常用】【语法】

    c++标准模板库STL[快速查找][最全][常用][语法] c标准模板库STL快速查找最全常用语法         vector- 变长数组         set-内部自动有序且不含重复元素     ...

  4. c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解

    c++ 标准模板库 stl 顺序容器 容器 顺序性 重复性 支持迭代器 vector 动态数组 无序 可重复 随机访问迭代器 deque 双向队列 无序 可重复 随机访问迭代器 list 双向链表 无 ...

  5. 第十章 标准模板库STL

    第十章 标准模板库STL 因为是在复习时重写的,无法在PTA上验证,编程题格式可能有误. 判断题 1.可以通过下标随机访问向量vector中的元素.(T) 2.当向量对象的内存用完之后,就会产生越界错 ...

  6. 标准模板库STL(Standard Template Library)

    标准模板库STL(Standard Template Library)指南 /*刘振飞liuzf@pku.org.cn 1999-10-20*/ / *版权所有 (C) 1999-2004 刘振飞li ...

  7. C++中标准模板库STL基本概念

    0. 前言 C++语言的一大优势就是便于软件的重用,而重用体现在两方面: 1. 面向对象思想:继承和多态,标准类库 2. 泛程序设计(Generic Programming)思想:模板机制,标准模板库 ...

  8. 蓝桥杯算法竞赛系列第0章——蓝桥必考点及标准模板库STL(上)(万字博文,建议抱走)

    欢迎来到:遇见蓝桥遇见你,不负代码不负卿! 目录 ​ 一.蓝桥必考点剖析 二.什么是STL 三.vector的常见用法详解 1.vector的定义 2.vector容器内元素的访问 (1).通过下标访 ...

  9. C++ ——模板 标准模板库STL

    C++ 知识基础 流操作符 类 & 基础 初始化和重载 类 & 高级 继承和多态 模板 & 标准模板库STL 目录 C++ 一.模板 1.函数模板 2.类模板 二.标准模板库S ...

最新文章

  1. Python字典部分源码分析,字典是无序的
  2. python面试总结 博客园_python面试题总结
  3. 【BZOJ4028】[HEOI2015]公约数数列(分块/数量级很小法)
  4. java jtable导出txt_如何将jtable中的文本数据保存到文件中
  5. curl: (7) Failed connect to localhost:9200; Connection refused
  6. python语言的核心理念是_Python编程语言的核心是什么?
  7. android4.4 adb工具包,Android ADB工具
  8. C语言猜数字游戏代码
  9. 越想越气(拍拍购物过程)
  10. 图像处理 之 扫描全能王代替品
  11. PowerDNS Authoritative Server 3.2 RC3 发布
  12. 学籍管理html,河南学籍管理系统
  13. 我的毕业旅行--Four night in beijing
  14. Asta:是什么终结了我的鸽王生涯?Go 1.13 发布!
  15. 摸鱼一小时实现的斗牛Game【Java版】,希望各位友友远离赌博~
  16. 工作辛苦了,提前祝大家五一劳动节快乐!!
  17. java将string转为json_java 怎么将string转为json数据
  18. 360浏览器(QQ浏览器 等双核浏览器) 极速 IE 兼容 模式的 兼容问题处理:设置优先使用极速模式 渲染和加载
  19. 及时总结工作中的经验是个人成长的关键
  20. 江湖笑(2006[神雕侠侣]片尾主题曲)铃声 江湖笑(2006[神雕侠侣...

热门文章

  1. Android RelativeLayout marginRight not working
  2. 启动u盘还原成普通u盘(Windows Diskpart)
  3. 联想sr650安装centos_一次联想ThinkServer RD650 510i配置及系统安装过程
  4. 如何用注册表删除Win10桌面上的顽固IE图标
  5. 现代控制理论学习笔记
  6. 记一次云服务器被密码爆破的经历——关小黑屋、改密码、改端口
  7. 光波导的足迹和光栅分析
  8. 2021年茶艺师(初级)考试报名及茶艺师(初级)找解析
  9. 六级备考28天|CET-6|翻译井冈山|2021年12月|8:20~9:40+ ~10:17
  10. pyinstaller使用